1

我有一个带有 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对象中的文档?(文档是第一个代码片段中看到的字节数组)

4

0 回答 0