我定義以下類型的模式:與JAXB序列化和任何
<xsd:complexType name="Payload">
<xsd:sequence>
<xsd:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
以及創建像這樣的對象:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Payload", propOrder = {
"any"
})
public class Payload {
@XmlAnyElement(lax = true)
protected List<Object> any;
}
現在我嘗試添加另一個生成的JAXB對象有效載荷做這樣的事情:
Class payloadClass = ...;
JAXBContext context = JAXBContext.newInstance(WrapperRequest.class, payloadClass);
...
marshaller.marshal(wrappedRequest);
但我得到一個可怕的異常,看起來像它永遠不會因此我決定首先將有效載荷對象序列化爲XML,然後將其作爲有效載荷中的字符串添加。
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(sdoRequest.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(new JAXBElement(new QName("uri", sdoRequest.getClass().getSimpleName()), sdoRequest.getClass(), sdoRequest), writer);
payload.getAny().add(writer.toString());
而這種情況爆發了,「java.lang.String」不包含@XmlRootElement。
那麼如何使用xs:任何有史以來的JAXB?由於JAXB將Payload轉換爲Object,並且它不會序列化Object中的任何內容,所以似乎沒有任何工作要工作。這也是Axis2的全部內容,所以這一點非常具有挑戰性。
當您嘗試將包裝對象添加到Any有效內容時,會得到什麼異常? – gregwhitaker
以下應該有所幫助:http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html –
這是部分的WSDL文件是如何結合在一起,我有零控制。但是,包裝請求是在一個WSDL中定義的,而進入有效負載的請求是在另一個WSDL中定義的。它們都聲明一個BaseRequest,但是當代碼生成時它們是不同的類。我得到這個異常兩個類具有相同的XML類型名稱{http://esp.lala.com/2012/eo}BaseRequest。使用@ XmlType.name和@ XmlType.namespace爲它們分配不同的名稱。 – chubbsondubs