我的合作伙伴为我的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
提前致谢。
答案 0 :(得分:4)
混合内容元素在JAXB中处理起来有点棘手。
您的List<Object>
可以混合使用:
String
,表示元素中的文字内容JAXBElement
,用于表示架构中已知的没有@XmlRootElement
注释的元素类型@XmlRootAnnotation
org.w3c.dom.Element
如果上下文不知道内容 @XmlMixed
的javadoc更详细,但这是它的基础。
答案 1 :(得分:0)
我会说这种通用的WSDL完全没用。 WSDL没有合同,没有类型安全,也没有优势。通过检查你学到了什么?没有。