2015-01-05 1 views
0

wsimport (또는보다 정확하게 wsimport를 사용하는 Eclipse 마법사를 사용하고 있습니다)를 사용하여 웹 서비스 용 새 서버 측 클래스를 생성하려고합니다. 소스 WSDL은 ../ServiceName?wsdl URL을 통해 현재 구현에서 가져온 것입니다.wsimport는 소스 wsdl과 다른 wsdl을 생성하는 클래스를 만듭니다.

내 문제는 내가 새 클래스를 게시하고 새로운? wsdl URL을 탐색 할 때 결과 WSDL이 원본과 다릅니다. 이것은 기존 클라이언트가 새로운 버전의 서비스를 사용하려고 할 때 오류의 원인 인 것 같습니다.

원본 : :

<wsdl:message name="executeResponse"> 
    <wsdl:part element="impl:ServiceNameResult" name="ServiceNameResult"/> 
</wsdl:message> 
<wsdl:message name="executeRequest"> 
    <wsdl:part element="impl:executeRequest" name="executeRequest"/> 
</wsdl:message> 
<wsdl:portType name="ServiceName"> 
    <wsdl:operation name="execute" parameterOrder="executeRequest"> 
    <wsdl:input message="impl:executeRequest" name="executeRequest"/> 
    <wsdl:output message="impl:executeResponse" name="executeResponse"/> 
    </wsdl:operation> 
</wsdl:portType> 

새로운 기능 :

<wsdl:message name="executeResponse"> 
    <wsdl:part element="tns:ServiceNameResult" name="ServiceNameResult"> 
    </wsdl:part> 
</wsdl:message> 
<wsdl:message name="execute"> 
    <wsdl:part element="tns:executeRequest" name="executeRequest"> 
    </wsdl:part> 
</wsdl:message> 
<wsdl:portType name="ServiceName"> 
    <wsdl:operation name="execute"> 
    <wsdl:input message="tns:execute" name="execute"> 
    </wsdl:input> 
    <wsdl:output message="tns:executeResponse" name="executeResponse"> 
    </wsdl:output> 
    </wsdl:operation> 
</wsdl:portType> 

변화가에 여기에 고객과의 문제가 발생할 것으로 보인다 차이의 예와 WSDL의 하위 섹션입니다 portType 입력 메시지. "executeRequest"에서 "execute"로 이름이 변경됩니다.

왜 이것이 변경 될지 또는 Java 클래스에서이를 수정하는 방법을 알 수 없습니다. 모든 주석이 정확 해 보입니다.

+0

Eclipse에서 Apache Axis2, Apache Axis 또는 Apache CXF를 사용하여 WSDL에서 Java 클래스를 생성합니까? –

+0

Apache CXF 저는 믿습니다. 그러나 나는 완전히 확신하지 못한다. 내가 게시 할 때 CXF 웹 서비스라고합니다. 리버티 프로파일에 게시하고 있습니다. – kutuzof

+0

@BuhakeSindi IBM WebSphere JAX-WS를 사용하고 있습니다. – kutuzof

답변

0

"Request"접미사가없는 것은 기능이며 CXF의 버그가 아닙니다. 내가 뭘해야 서버 쪽 인터셉터를 내 클라이언트를 업데이트하거나 구현 중 하나입니다 :

http://cxf.apache.org/docs/interceptors.html

이 :

당신은 org.apache.cxf.service.factory.DefaultServiceConfiguration를 서브 클래스 화해 getInputMessageName 메소드를 오버라이드 (override) 할 필요가

QName에 "Request"를 추가하십시오. 그런 다음 서비스 구성을 하위 클래스로 가리 키도록 CXF를 구성해야합니다.

또한 어떻게해야하는지 알 수있는 좋은 해결책 인 것 같습니다. https://stackoverflow.com/questions/27818072/subclassing-defaultserviceconfiguration

관련 문제