2011-01-11 5 views
2

JBossWS 3.1.2에서 HashMap을 인수로 사용하여 웹 서비스를 개발하려고합니다. 현재 사용중인 JBoss 버전과 함께 배포되는 JBossWS 버전을 사용하고 있습니다. wsprovide를 사용하여 WSDL을 생성하고 wsconsume을 사용하여 WS 클라이언트 스텁을 만듭니다.JBossWS 3.1.2에서 HashMap을 @WebParam으로 사용하는 방법

내 WebService에의 단순화 된 버전은 다음과 같습니다

@WebService(targetNamespace = "http://localhost/ping", serviceName = "Ping") 
@SOAPBinding(style = SOAPBinding.Style.RPC) 
public class Ping { 
    @WebMethod 
    @WebResult(name="result") 
    public String ping(@WebParam(name="arguments") HashMap arguments) { 
     return "pong"; 
    } 
} 

wsprovide에 의해 생성 된 WSDL에는 다음이 포함

<types> 
    <xs:schema targetNamespace='http://localhost/ping' version='1.0' xmlns:tns='http://localhost/ping' xmlns:xs='http://www.w3.org/2001/XMLSchema'> 
     <xs:complexType name='hashMap'> 
      <xs:complexContent> 
       <xs:extension base='tns:abstractMap'> 
        <xs:sequence/> 
       </xs:extension> 
      </xs:complexContent> 
     </xs:complexType> 
     <xs:complexType abstract='true' name='abstractMap'> 
      <xs:sequence/> 
     </xs:complexType> 
    </xs:schema> 
</types> 

생성 된 클라이언트 코드는 빈 추상 클래스 AbstractMap.java 및 빈 클래스의 HashMap를 포함 . 다음을 생성 된 것으로 유사

내가 예상 한 것 WSDL은 :

<complexType> 
    <sequence> 
     <element name="key" type="anyType" /> 
     <element name="value" type="anyType" /> 
    </sequence> 
</complexType> 

또한 사용자 정의 클래스 (된 parameterMap)하지만, 그냥 같은 더 가지고와의 HashMap를 포장했습니다.

내가 볼 수없는 다음 단계가 있습니까? JBossWS를 사용하여 웹 서비스를 개발할 때의 한계점은 무엇입니까?

답변

5

대답은 How can I pass in an array as a value into a PHP soapclient request?

나는 JAX-WS의 솔루션에 대한 PHP의 문제로보고 생각하지 않을 것

...

해시 맵라는 또 다른 자바 클래스에 싸여해야 할 또 다른 게시물에 있었다 HashMapWrapper.java (또는 무엇이든).

public class HashMapWrapper { 
    public HashMap<String, Object> parameters; 
} 

핑 (ping) 메서드 호출의 HashMap 대신 래퍼 클래스를 사용하도록 수정해야합니다 :

public String ping(@WebParam(name="arguments") HashMapWrapper arguments) { 

이 회전에 유용한 Java 스텁을 생성 적절한 WSDL을 생성합니다.

관련 문제