该类对Web Service方法的结果是什么?

时间:2009-09-16 19:15:40

标签: java web-services wsdl

我的合作伙伴为我的Web服务提供了WSDL。我对Web服务没有太多经验,所以我对使用WSDL的东西持怀疑态度。一种特殊的方法允许我们获取一些信息,但我们只能使用它一次(或面临惩罚。)问题是它在SOAP响应中作为“原始XML”返回,所以我不确定会是什么返回,以及如何处理它并妥善保存。

WSDL的相关部分是:

<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 生成了以下类:

@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;
        }

    }

}

所以问题是,getContent()返回的对象类是什么?他们提供的示例C#示例没有MethodResponse或MethodResult,但返回类型只是XmlNode。

顺便说一下,即使代码是由wsimport生成的,该应用程序也使用Axis2。其他可用的方法返回适当的对象。

一个简单的测试(在Mono上运行的示例服务器)在客户端生成了一个异常:

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

提前致谢。

2 个答案:

答案 0 :(得分:4)

混合内容元素在JAXB中处理起来有点棘手。

您的List<Object>可以混合使用:

  • String,表示元素中的文字内容
  • JAXBElement,用于表示架构中已知的没有@XmlRootElement注释的元素类型
  • 的上下文已知类的实例@XmlRootAnnotation
  • org.w3c.dom.Element如果上下文不知道内容

@XmlMixed的javadoc更详细,但这是它的基础。

答案 1 :(得分:0)

我会说这种通用的WSDL完全没用。 WSDL没有合同,没有类型安全,也没有优势。通过检查你学到了什么?没有。