2017-10-25 10 views
0

Apache CXF 3.1을 사용하여 타사 웹 서비스에 액세스하려고합니다. wsdl2java가 생성 된 코드 또는 컬을 사용하여 서비스를 호출하면 서비스가 유효한 SOAP 메시지가 아님을 나타내는 예외가 리턴됩니다. 아래 메시지를 참조하십시오.Apache CXF를 사용하여 봉투에서 비누 네임 스페이스를 제거하는 방법

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="connectivityTest"> 
     <echoBack>Hello IIS!</echoBack> 
    </connectivityTest> 
    </soap:Body> 
</soap:Envelope> 

네임 스페이스 (soap :)를 제거하고 curl을 사용하여 서비스를 호출하면 서비스가 작동합니다. 아래 작업 메시지를 참조하십시오. 이 전송되기 전에

<?xml version="1.0" encoding="utf-8"?> 
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope"> 
    <Body> 
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:ns2="http://www.w3.org/2003/05/soap-envelope"> 
     <echoBack>Hello IIS V2!</echoBack> 
    </connectivityTest> 
</Body> 

어떻게 봉투 내 SOAP 메시지의 본문 요소의 네임 스페이스를 제거하는 방법은 무엇입니까? 웹 검색을 기반으로하여 요격기를 만들어야하는 것처럼 보입니다. 어떤 요소가 Envelope와 Body 요소에서 네임 스페이스를 제거하기위한 인터셉터의 예제를 제공 할 수 있다면 그것은 대단히 감사 할 것입니다.

미리 감사드립니다. JR

답변

1

요격기가 필요하지 않습니다. jaxws 속성에서 네임 스페이스를 구성 할 수 있습니다.

<jaxws:properties> 
    <entry key="soap.env.ns.map"> 
     <map> 
      <entry key="" value="http://schemas.xmlsoap.org/soap/envelope/"/> 
     </map> 
    </entry> 
    <entry key="disable.outputstream.optimization" value="true"/> 
</jaxws:properties>