java - Web 服务方法结果的类是什么?

标签 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

提前致谢。

最佳答案

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

您的List<Object>可以是以下内容的混合:

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

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

关于java - Web 服务方法结果的类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434940/

相关文章:

web-services - 未捕获的类型错误 : Cannot call method 'request' of undefined in sencha touch2 external webservice

soap - 如何在 Switchyard 中公开现有的 wsdl

java - 如何区分一个pom.xml中的不同wsdl位置-Maven

java - Java 中的徘徊对象垃圾收集

java - Spring Rabbit Listener关闭处理程序或返回没有重新传递标志的消息

c# - 返回非常大的字符串时 .asmx 请求超时

java - 如何检查 spring RestController 是否有未知的查询参数?

java - Jersey/Jackson - 类对象序列化

java - 如何从 Java Servlet 返回 JSON 对象

mysql - Laravel 5.1 使用 Controller 和模型使用 SOAP wsdl 服务