[SPRING] Spring WS 웹 서비스. SAAJ를 사용하여 응답에 첨부 파일 추가 - 엔드 포인트 용 어댑터 없음
SPRINGSpring WS 웹 서비스. SAAJ를 사용하여 응답에 첨부 파일 추가 - 엔드 포인트 용 어댑터 없음
첨부 파일이있는 응답을 반환하기 위해 Spring-WS를 얻으려고 정말 어려움을 겪고 있습니다. 필자는 MTOM 버전을 사용할 수있게 만들었지 만 클라이언트가 MTOM을 사용할 수 있어야한다고 생각하기 때문에 클라이언트에 일부 사전 요구 사항이 있습니다 (올바르지 않으면이 문제를 해결하십시오).
내가 지금하려는 것은 SAAJ와 Spring-WS를 사용하여 표준 SOAP을 첨부물 구현과 함께 사용하는 것이다.
이를 위해 로컬 파일 시스템의 이미지를 응답에 첨부하는 엔드 포인트를 구현했습니다.
@Endpoint
public class TestEndPoint {
private SaajSoapMessageFactory saajMessageFactory;
@PayloadRoot(namespace="http://ws.mypackage.com", localPart="downloadMessageRequestSaaj")
@ResponsePayload
public JAXBElement<DownloadResponseSaajType> invoke(@RequestPayload DownloadMessageRequestSaaj req, MessageContext context ) throws Exception {
DownloadResponseSaajType response = new DownloadResponseSaajType();
DownloadResponseSaajType.PayLoad payload = new DownloadResponseSaajType.PayLoad();
DataHandler handler = new javax.activation.DataHandler(new FileDataSource("c:\\temp\\maven-feather.png"));
SaajSoapMessage message = saajMessageFactory.createWebServiceMessage();
message.addAttachment("picture", handler);
context.setResponse(message);
payload.setMessagePayLoad(handler);
return objectFactory.createDownloadMessageResponseSaaj(response);
}
public void setSaajMessageFactory(SaajSoapMessageFactory saajMessageFactory){
this.saajMessageFactory = saajMessageFactory;
}
public SaajSoapMessageFactory getSaajMessageFactory(){
return saajMessageFactory;
}
}
Saj 속성은 아래와 같이 종속성을 주입합니다.
<sws:annotation-driven/>
<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="com.mypackage.TestEndPoint">
<property name="saajMessageFactory" ref="saajMessageFactory" />
</bean>
위의 서비스를 호출하려고하면 다음과 같은 오류가 발생합니다.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">No adapter for endpoint [public javax.xml.bind.JAXBElement<com.mypackage.ws.DownloadResponseSaajType> com.mypackage.TestEndPoint.invoke(com.mypackage.ws.DownloadMessageRequestSaaj,org.springframework.ws.context.MessageContext) throws java.lang.Exception]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
오늘 MessageContext 매개 변수를 제거하기 위해 메서드 시그니처를 변경했다는 것을 알게되었습니다.
public JAXBElement<DownloadResponseSaajType> invoke(@RequestPayload DownloadMessageRequestSaaj req)
그러나 문제는 첨부 파일을 추가 할 수 있도록 MessageContext에 액세스해야한다는 것입니다. 어쩌면 내 구성이 어딘가 잘못되었을 수 있습니까?
해결법
-
==============================
1.두 경우 모두 클라이언트가 첨부 파일을 인식해야하므로 mtom을 사용하는 것이 좋습니다 (표준이됨에 따라).
두 경우 모두 클라이언트가 첨부 파일을 인식해야하므로 mtom을 사용하는 것이 좋습니다 (표준이됨에 따라).
어떤 버전의 spring-ws와 어떤 maven group-id를 사용하고 있는지 확인하십시오. 이 기능이 최근에 추가 되었기 때문에 동일한 오류가 발생했습니다 (제 생각에는?).
이 항목을 시도하고 다른 봄 - ws 가져 오기를 제거하여 만들기
<dependency> <groupId>org.springframework.ws</groupId> <artifactId>spring-ws-core</artifactId> <version>2.0.2.RELEASE</version> </dependency>
from https://stackoverflow.com/questions/11430527/spring-ws-web-service-adding-an-attachment-to-the-response-using-saaj-no-adap by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 동적 인 Listener 수 추가 (Spring JMS) (0) | 2019.05.15 |
---|---|
[SPRING] 봄 세션 + 봄 웹 소켓. 세션 ID를 기반으로 특정 클라이언트에게 메시지 보내기 (0) | 2019.05.14 |
[SPRING] application.properties에서 값 읽기 Spring Boot (0) | 2019.05.14 |
[SPRING] Spring 부트를 EAR 프로젝트에 통합 (0) | 2019.05.14 |
[SPRING] Spring - JPA - 작업을 읽지 만 계속 유지합니다. 사용할 수있는 트랜잭션 EntityManager가 없습니다. 왜? (0) | 2019.05.14 |