我有以下Java类:
public class input{
@XmlElement(namespace="http://www.example.com/TopLevel")
public TopLevel TopLevel;
}
和
public class TopLevel{
private String attribute;
public void setAttribute(String attribute) {
this.attribute = attribute;
}
public String getAttribute() {
return attribute;
}
}
和
import javax.xml.bind.annotation.XmlType;
@XmlType(namespace="http://org.classes.SubClass", name="SubClass")
public class SubClass extends TopLevel {
private String attribute2;
public String getAttribute2() {
return attribute2;
}
public void setAttribute2(String attribute2) {
this.attribute2 = attribute2;
}
}
在部署类之后,我想要发出SOAP请求,并能够在XML中将TopLevel变形为SubClass。我的请求看起来像这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
... xmlns:top1="http://www.example.com/TopLevel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<top:TopSubClass_TestRequest>
<par:input>
<input>
<top1:toplevel xsi:type="ns5:subclass" xmlns:ns5="http://org.classes.SubClass">
<attribute2>test</attribute2>
</top1:toplevel>
</input>
</par:input>
</top:TopSubClass_TestRequest>
</soapenv:Body>
</soapenv:Envelope>
我期待的是SubClass将被映射到TopLevel并且我可以使用attribute2
但由于某种原因,它不会验证。没关系似乎没有定义的请求中的命名空间。我跳过它们以使请求更容易阅读。验证问题发生在以下行:
<top1:toplevel xsi:type="ns5:subclass" xmlns:ns5="http://org.classes.SubClass">
话说:
Invalid xsi:type qname: 'subclass' in element Input
有人能指出我做错了什么吗?根据所有例子,我发现这应该是处理它的方法。