2009-09-16 3 views
2

파트너가 웹 서비스 용 WSDL을 받았습니다. 필자는 웹 서비스에 익숙하지 않기 때문에 WSDL에 대해 회의적입니다. 한 가지 특별한 방법으로 우리는 정보를 얻을 수 있지만 한번만 사용할 수 있습니다. (또는 불이익을 당할 수도 있습니다.) 문제는 그것이 SOAP 응답 안에 "원시 XML"로 반환된다는 것입니다. 돌려 보내 져야하고 어떻게 다루어야하며 그것을 올바르게 보관해야합니다. 에 의해 반환 된 객체의 클래스가 될 것입니다 무엇을웹 서비스 메서드 결과에 대한 클래스는 무엇입니까?

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "methodResult" 
}) 
@XmlRootElement(name = "MethodResponse") 
public class MethodResponse { 

    @XmlElement(name = "MethodResult") 
    protected MethodResponse.MethodResult methodResult; 

    public MethodResponse.MethodResult getMethodResult() { 
     return methodResult; 
    } 

    public void setMethodResult(MethodResponse.MethodResult value) { 
     this.methodResult = value; 
    } 


    @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "content" 
    }) 
    public static class MethodResult { 

     @XmlMixed 
     @XmlAnyElement(lax = true) 
     protected List<Object> content; 

     public List<Object> getContent() { 
      if (content == null) { 
       content = new ArrayList<Object>(); 
      } 
      return this.content; 
     } 

    } 

} 

그래서 질문은 :은 다음 클래스를 생성

<s:element name="MethodResponse"> 
    <s:complexType> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="MethodResult"> 
      <s:complexType mixed="true"> 
      <s:sequence> 
       <s:any /> 
      </s:sequence> 
      </s:complexType> 
     </s:element> 
     </s:sequence> 
    </s:complexType> 
    </s:element> 

wsimport의 :

는 WSDL의 관련 부분이있다 getContent()? 제공 한 샘플 C# 샘플에는 MethodResponse 또는 MethodResult가 없지만 반환 유형은 XmlNode입니다.

참고 : wsimport로 코드를 생성했지만 응용 프로그램이 Axis2를 사용합니다. 사용 가능한 다른 메소드는 적절한 객체를 반환합니다. 미리

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could not deserialize Soap message 

감사 :

간단한 시험 (샘플 모노 서버에서 실행되는) 클라이언트 측의 예외를 생성.

+0

며칠 전 객체가 무엇인지 알아 냈습니다. 각 객체는 org.w3c.dom.Element 인 List 입니다. – Carlos

답변

4

혼합 컨텐츠 요소는 JAXB에서 처리하기 까다로운 부분입니다. ,

  • String@XmlRootElement 주석
  • 이없는 스키마에 알려진 요소 유형을 표현하기 위해, 요소
  • JAXBElement에 텍스트 내용을 나타내는 :

    당신의 List<Object>은 혼합 될 수 있습니다

  • 문맥에 따라 알려진 클래스의 인스턴스 do@XmlRootAnnotation
  • org.w3c.dom.Element ntent가 문맥에 알려지지 않음

@XmlMixed에 대한 javadoc이 더 자세히 설명되어 있지만 그 기본입니다.

+0

글쎄, 간단한 테스트에서 Axis2가 그 중 하나를 수행 할 수 없으며 단지 예외를 던집니다. – Carlos

0

나는 그런 일반적인 WSDL은 전혀 쓸모가 없다고 말할 것이다. 계약이 없으며 유형 안전성이 없으며 WSDL에 이점이 없습니다. 그것을 검토함으로써 무엇을 배울 수 있습니까? 아무것도.

+0

아마 사실 일지 모르지만 나는 아직도 그것을 다루어야합니다 ... – Carlos

관련 문제