2016-11-09 7 views
0

CXF를 사용하여 SOAP 웹 서비스를 작성하는 스프링 부트 기반 프로젝트가 있습니다.JAX-WS 엔드 포인트에서 SOAP1.2 메시지를 받아 들일 수있게하는 방법

SOAP 1.1 메시지 (SOAPUI 사용)는 정상적으로 작동하지만 SOAP 1.2 메시지를 보낼 때 (물론 동일한 WSDL을 사용하여) 메시지가 나타납니다. "A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint". 메시지가 자체적으로 설명하고 있지만 내 끝점에서 1.2 메시지를 허용하지 않는 이유를 이해할 수 없습니다.

내 WSDL에는 soap12에 대한 올바른 바인딩 및 네임 스페이스가 포함되어 있습니다. 내 스프링 @Configuration 클래스에서

은 내가 CXF 엔드 포인트 콩이 추가 : 도움이되지 않았다

endpoint.setBindingConfig(new BindingConfiguration() 
    { 
     @Override 
     public String getBindingId() 
     { 
      return SOAPBinding.SOAP12HTTP_MTOM_BINDING; 
     } 
    }); 

. 필자는 필사적으로, @BindingType@SOAPBinding 어노테이션을 시도했지만 효과가 없었으므로 SaajSoapMessageFactorySoapVersion.SOAP_12으로 시도했습니다. 일하지 않았어. 내 jaxws-maven-plugin<extension>true</extension><protocol>Xsoap1.2</protocol>을 시도했습니다. 실패한.

끝 점이 SOAP 1.2 메시지를 수신하도록 명확하게 구성되어 있지 않습니다. 이것을 어떻게 성취합니까?

답변

0

나는 그것을 알아 냈다. 끝점을 구현할 때 바인딩 URL을 설정해야했습니다.이유가 없기 때문에 나중에 설정하지 않았습니다.

EndpointImpl endpoint = new EndpointImpl(springBus(), statusService(), SOAPBinding.SOAP12HTTP_BINDING); 
0

보내시는 요청이 SOAP 1.2 대신 SOAP 1.1 끝점에 도달 한 것처럼 보입니다.

위로 가기 접근 방식을 사용하여 WSDL을 작성한 경우 SOAP 1.2 용 SOAP 바인딩이 wsdl에 있는지 확인하십시오. 또한 SOAP 1.2의 포트 (wsdl : port)는 wsdl의 wsdl : service 아래에 나타나야합니다.

아래쪽 접근 방식을 사용하여 작성된 경우 mtom이 활성화되어있을 때이 주석 @BindingType (value = SOAPBinding.SOAP12HTTP_MTOM_BINDING)이 SIB에 있는지 확인하십시오. 그렇지 않으면 @BindingType (value = javax.xml.ws.soap.SOAPBinding)을 사용하십시오. SOAP12HTTP_BINDING).

다음 maven 플러그인을 사용하는 클라이언트 wsdl 생성에서 <extension>true</extension>을 사용해야합니다. 아래 서비스 섹션 : 당신이 WSDL 2 개 포트 WSDL을 사용하는 경우, 예를 들어 위의 후

, 당신은 비누 1.2 엔드 포인트를 사용하려면

<wsdl:service name="TestService"> 
     <wsdl:port name="TestPortSoap11" binding="tns:TestPort12Binding"> 
      <soap:address location="http://127.0.0.1:8081/testSoap11Endpoint"/> 
     </wsdl:port> 
     <wsdl:port name="TestPortSoap12" binding="tns:TestPort12Binding"> 
      <soap12:address location="http://127.0.0.1:8081/testSoap12Endpoint"/> 
     </wsdl:port> 
    </wsdl:service> 

는 서비스의 인스턴스를 얻을 수 있는지 확인 같은 호출하여 :.

TestPortType testService = new TestService().getTestPortSoap12(); 

굵은 "새로운 TestService()의 텍스트를주의를 TestPortSo를 얻을 수 ap12() "은 SOAP 1.2 포트 이름의 wsdl과 일치합니다.

또는 웹 서비스 클라이언트의 구성에

은 사용하는 엔드 포인트 주소가 SOAP 1.2 포트를 가리키고 있는지 확인하고 우리의 경우, 예를 들어, http://127.0.0.1:8081/testSoap12Endpoint하지 http://127.0.0.1:8081/testSoap11Endpoint입니다.

이 단계가 실패하면 wsdl 코드 조각 (wsdl : service 섹션 표시)과 @Configuration 웹 서비스 스프링 구성을 친절하게 공유하십시오.

+0

내 문제는 아니 었습니다. 원래 게시물에서 말했듯이 SOAP 1.2의 올바른 바인딩과 네임 스페이스가 있습니다. 나는 또한 성공없이 확장 요소를 사용하여 언급했다. 그러나, 나는 그 문제를 직접 풀었다. 내 대답을 보라. – Roger

+0

그건 좋은 소식이에요. –