MTOM を使用した WSDL があり、それを適切に処理できました。利用可能なドキュメントがありました。これが最終的な結果です。動作することを確認したことを除いて、多くのテストは行われませんでした。
byte[] document = ... ;
DataSource dataSource = new ByteArrayDataSource(document, "application/octet-stream");
DataHandler dataHandler = new DataHandler(dataSource);
response.setDocument(dataHandler);
現在、インフラ担当者は XSD を XOP を使用するように変更しました。これは、実際のユース ケースである応答ではなく、要求の添付ファイルに問題がなかったからです。そのため、彼らは私たちの XSD を変更し、.xop.xsd
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://www.w3.org/2004/08/xop/include'
targetNamespace='http://www.w3.org/2004/08/xop/include' >
<xs:element name='Include' type='tns:Include' />
<xs:complexType name='Include' >
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='href' type='xs:anyURI' use='required' />
<xs:anyAttribute namespace='##other' />
</xs:complexType>
</xs:schema>
この新しい構造により、メソッドsetDocument
は次のように定義されますsetDocument(Include)
。
生成されるInclude
クラスは基本的に次のとおりです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Include", namespace = "http://www.w3.org/2004/08/xop/include", propOrder = {
"any"
})
public class Include
implements org.jvnet.jaxb2_commons.lang.ToString
{
@XmlAnyElement(lax = true)
protected List<Object> any;
@XmlAttribute(name = "href", required = true)
@XmlSchemaType(name = "anyURI")
protected String href;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
public List<Object> getAny() {
if (any == null) {
any = new ArrayList<Object>();
}
return this.any;
}
public String getHref() {
return href;
}
public void setHref(String value) {
this.href = value;
}
public Map<QName, String> getOtherAttributes() {
return otherAttributes;
}
// Other irrelevant methods for ToString.
}
私の質問は、そのオブジェクトにドキュメントを追加する方法と場所を教えてください。Include
(ドキュメントは、最初のコード スニペットに見られるバイト配列です)