如何使用JAXB编组时,包括SOAP信封标签?(How to include the soap en

2019-10-17 00:10发布

我使用编组JAXB SOAP请求。 这是工作,但生成的XML不包含soap:Envelope标签。 此外,命名空间被指示根元素,而不是在内侧soap:Envelope标签。 还有一个额外的standalone的XML标记属性。 我怎样才能实现输出类似于下面使用JAXB的编组第二XML?

目前,这里是我的编组XML看起来像:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
    <ns:name>Name</ns:name>
    <ns:age>18</ns:age>
</Customer>

这里是我多么希望它看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">   
    <soap:Body xmlns:ns="http://www.example.org/beanLevel1Namespace" xmlns:ns1="http://www.example.org/beanLevel2Namespace">
        <ns:Customer>
            <ns1:id>201200001</ns:id>
            <ns1:name>Name</ns:name>
            <ns1:age>18</ns:age>
        </ns:Customer>
    </soap:Body>
</soap:Envelope>

Answer 1:

您可以发送前一信封内添加XML。

"<Envelope><Body>" + your_xml + "</Body></Envelope>

始终保持你的元素级别命名空间; 没有信封水平。 看着一个元素是什么类型的时候,因为你的清晰度。 这不要紧,你把命名空间。

有您的编组XML的一个问题。 正确的XML是:

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
    <ns:name>Name</ns:name>
    <ns:age>18</ns:age>
</ns:Customer>

同样,也不要紧,你把命名空间声明:

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
</ns:Customer>

<Customer xmlns="http://www.example.org/beanLevelNamespace">
    <id>201200001</id>
</Customer>

<ns1:Customer xmlns:ns1="http://www.example.org/beanLevelNamespace">
    <ns2:id xmlns:ns2="http://www.example.org/beanLevelNamespace">201200001</ns2:id>
</ns1:Customer>

他们都是一样的。



文章来源: How to include the soap envelope tag when marshalling using JAXB?