2011-08-04 2 views
1

매개 변수없는 두 가지 방법이 포함 된 Java에서 웹 서비스를 만드는 데 문제가 있습니다. 그것은 하나 하나를 만들 간단합니다,하지만 난 더 이상 작동하도록하는 방법을 알아 내지 못했다 :JAX-WS를 사용하여 다중 매개 변수없는 함수 만들기

<message name="messageTwoRequest" /> 
<message name="messageTwoResponse" /> 

<message name="messageOneRequest" /> 
<message name="messageOneResponse" /> 

public void messageOne() { } 

으로 이어질 것이지만 추가

"서명"충돌로 연결됩니다. JAX-WS/JAX-RI는 들어오는 메시지에 빈 SOAP 몸체를 남기고 매개 변수없는 단일 메서드를 나타내는 것으로 매개 변수없는 메서드로보다 효율적으로 작업하려고하기 때문에 서명 충돌의 원인을 알고 있습니다. 참고로, 저는 RPC가 아닌 Document를 사용하고 있습니다.

허용 할 수있는 방법이 있습니까? 단순히 속성이 누락 되었습니까?

답변

0

내 질문의 목적은 같은 매개 변수가 방법을 달성하는 것이었다 다음

int someMethod(); 
ArbitraryObject someOtherMethod(); 

두 가지 방법이 같은 이름을 공유하지 않는 경우에도 들어오는 SOAP의 몸이 될 것이기 때문에, 그들은 충돌 SOAP 본체가 기술적으로는 동일합니다 (대부분의 엔진은 SOAP 본체 안에 <someMethod />과 같은 것보다는 인수가 없을 때 효율성을 위해 빈 몸체를 제공하는 것 같습니다).

간단히 말하면 문서/리터럴을 사용할 때이 문제를 해결하는 두 가지 간단한 방법이 있습니다. 이 문제를 해결하는 가장 간단한 방법은 단순히 다른 매개 변수를 지정하는 것입니다. 원래 두 가지를 구별하기 위해 더미, no-op 매개 변수 ("IgnoredParameter")를 제공했습니다. 다른 f}은 비 고유 매개 변수가있는 각 조작의 SOAP 조치에 대해 고유 한 값을 제공하는 것입니다. wsimport을 사용하여 생성하는 경우 해당 기능을 사용하려면 "-extension"을 제공해야합니다. 그렇지 않으면 오류가 발생하고 SOAP 동작이 무시됩니다.

두 번째 방법의 단점은 SOAP 동작이 HTTP (HTTP 헤더로 사용됨)와 잘 결합되어 있다는 것입니다. 내 경우에는 문제가되지 않았습니다. 그러나 분명히 항상 SOAP이 일반적인 것임을 고려할 때 반드시 그런 것은 아닙니다.

(통상적 인 빈 대 실제로 공급의 soapAction 참고) 사용이 바인딩 예 :

<operation name="someOtherMethod"> 
    <wsdlsoap:operation soapAction="urn:someOtherMethod"/> 
    <input name="someOtherMethodRequest"> 
     <wsdlsoap:body use="literal"/> 
    </input> 
    <output name="someOtherMethodResponse"> 
     <wsdlsoap:body use="literal"/> 
    </output> 
</operation> 

다른 비 충돌 조작/정지 soapAction="" 방법을 사용할 수있다.

관련 문제