合作伙伴向我提供了他们的 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/