[SPRING] Spring-WS의 응답 페이로드에 첨부 파일을 추가하려면 어떻게해야합니까?
SPRINGSpring-WS의 응답 페이로드에 첨부 파일을 추가하려면 어떻게해야합니까?
저는 컨텐츠를 공유하도록 설계된 웹 서비스 서버를 구축하고 있습니다. 첨부 파일이 포함 된 SOAP 응답을 통해 콘텐츠를 제공하고 싶습니다. 지금은 요청을 처리하고 응답을 제공하기 위해 Spring WS를 사용하고 있습니다.
내 서비스는 다음과 유사합니다.
@Endpoint
public class Service{
@PayloadRoot(namespace = "http://foo.com/coffee", localPart = "order")
@ResponsePayload
public Coffee getCoffee(@RequestPayload Order order){
return new Coffee("Hot Joe");
}
}
그러나 응답에 커피 한 잔의 사진을 첨부하고 싶다고 가정합니다. 어떻게해야합니까?
편집 : 제쳐두고, Spring-WS와 함께 제공되는 예제는 클라이언트를 사용하여 첨부 파일을 보내는 방법을 보여 주지만 서버가 어떻게 응답해야 하는지를 보여주지 않습니다 (여기서 제가 여기서 요구하고있는 것입니다).
해결법
-
==============================
1.Spring-WS의 문서는이 주제에 특히 가볍고 실제로 SOAP 첨부 파일을 추가하는 것은 꽤 쉽습니다. 나는 몇 가지 가정을 할 것이다.
Spring-WS의 문서는이 주제에 특히 가볍고 실제로 SOAP 첨부 파일을 추가하는 것은 꽤 쉽습니다. 나는 몇 가지 가정을 할 것이다.
첨부 파일은 SOAP 메시지의 MimeContainer에 있습니다. 이 컨테이너를 얻으려면 수동으로 SOAP 응답을 구성해야한다. 그렇게하는 것은 다음과 같이 보입니다.
SaajSoapMessageFactory factory = new SaajSoapMessageFactory( javax.xml.soap.MessageFactory.newInstance()); SaajSoapMessage message = factory.createWebServiceMessage();
이제 그림을 위해 DataHandler가 필요합니다.
DataHandler handler = new DataHandler( new URLDataSource( Service.class.getResource("coffee.jpg"))); message.addAttachment("picture", handler);
좋아요, 내용 : check, message : check, hm, 여전히 응답을 보내야합니다. 까다로운 부분은 MessageContext를 가져 와서이 특정 메시지를 우리가 응답 할 수 있도록 설정할 수 있다는 것입니다. getCoffee에 대한 정의를 편집하면됩니다.
public Coffee getCoffee(@RequestPayload Order order, MessageContext context)
함께 모아서:
@Endpoint public class Service{ private SaajSoapMessageFactory saajMessageFactory; // dependency inject this @PayloadRoot(namespace = "http://foo.com/coffee", localPart = "order") @ResponsePayload public Coffee getCoffee(@RequestPayload Order order, MessageContext context){ DataHandler handler = new DataHandler( new URLDataSource( Service.class.getResource("coffee.jpg"))); SaajSoapMessage message = saajMessageFactory.createWebServiceMessage(); message.addAttachment("picture", handler); context.setResponse(message); return new Coffee("Hot Joe"); } public void setSaajMessageFactory(SaajMessageFactory saajMessageFactory){ this.saajMessageFactory = saajMessageFactory; } public SaajMessageFactory getSaajMessageFactory(){ return saajMessageFactory; } }
좋은 측정을 위해 SaajMessageFactory를 얻는 데 필요한 bean 의존성 주입은 다음과 같습니다.
<bean id="soapMessageFactory" class="javax.xml.soap.MessageFactory" factory-method="newInstance" /> <bean id="saajMessageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"> <constructor-arg ref="soapMessageFactory" /> </bean> <bean id="myService" class="Service"> <property name="saajMessageFactory" ref="saajMessageFactory" /> </bean>
from https://stackoverflow.com/questions/6433762/how-do-i-add-an-attachment-to-a-response-payload-in-spring-ws by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 리소스 파일을 찾을 수없는 봄 (CSS, JSP 등 ...) (0) | 2019.02.09 |
---|---|
[SPRING] 스프링 배치에서 x 번 반복 (0) | 2019.02.09 |
[SPRING] JSR-303과 Spring Validator 클래스를 서비스 레이어에 결합하는 방법은 무엇입니까? (0) | 2019.02.09 |
[SPRING] spring-boot : 패키징에 대한 종속성 제외 (0) | 2019.02.09 |
[SPRING] Spring MVC의 유효성 검사 (0) | 2019.02.09 |