当数据包含xmlns =“”时,Jaxb输出无效的Xml

时间:2015-04-27 05:20:02

标签: xml-namespaces jaxb2

我使用带有jaxb绑定的cxf实现了jax-ws服务。它从另一个下游服务接收xml,将此xml解组到POJO并将其保存到持久性缓存存储。将来的请求来自此持久性存储。有时从下游服务接收的xml包含xmlns =“”。该服务能够从持久性缓存存储中解组xml,但是当它将响应编组回客户端时,xml的格式不正确。 这是从下游服务接收的xml。注意带有xmlns =“”的PolicyID元素。

<message:RetrieveOrderResponse
xmlns:common="urn:xyz:om:common:defn:v1" xmlns:message="urn:xyz:om:order:messages:v1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<common:MessageInfo CreateDateTime="2015-04-17T13:13:36.819-07:00"
    MessageGUID="d8ad2956-ff69-45ff-9d57-c30dc50569a1" TransactionGUID="a772169a-b138-40e7-8d16-ca86b68d38b8">
    <common:DebugTraceBoolean>true</common:DebugTraceBoolean>
</common:MessageInfo>
<common:MessageStatus>
    <common:Status>Success</common:Status>
</common:MessageStatus>
<common:OrderList>
    <common:Order>
        <common:OrderLineList>
            <common:OrderLine>
                <common:OrderLineData namespace="urn:xyz:e3:data:abc:types:v1"
                    type="xyzProduct">
                    <ns2:xyzProduct xmlns:datatype="urn:xyz:om:supply:datatype:defn:v1"
                        xmlns:finance="urn:xyz:e3:data:financetypes:defn:v4"
                        xmlns:internal="urn:xyz:cc:es:order:internal" xmlns:min="xalan://org.jaxen.function.MinDateTimeFunction"
                        xmlns:ns2="urn:xyz:e3:data:abc:types:v1" xmlns:ns3="urn:xyz:e3:data:basetypes:defn:v4"
                        xmlns:ns4="urn:xyz:e3:data:financetypes:defn:v4" xmlns:ns5="urn:xyz:e3:data:timetypes:defn:v4"
                        xmlns:ns6="urn:xyz:e3:data:messagetypes:defn:v5" xmlns:ns7="urn:xyz:e3:data:placetypes:defn:v4"
                        xmlns:ns8="urn:xyz:om:supply:messages:defn:v1">
                        <PolicyID xmlns="" /> 
                        <ns2:abcProduct>
                            <ns2:DiningSeatingInformation>
                                <BookingStatusCode xsi:nil="true" />
                                <DinSeatingCode xsi:nil="true" />
                            </ns2:DiningSeatingInformation>
                        </ns2:abcProduct>
                    </ns2:xyzProduct>
                </common:OrderLineData>
            </common:OrderLine>
        </common:OrderLineList>
    </common:Order>
</common:OrderList>

此xml需要执行以下步骤。

  1. 解散到POJO
  2. 将POJO编组回xml
  3. 将步骤2中的xml解组回POJO
  4. 将POJO从第3步编组为xml 来自步骤4的所得xml不能很好地形成。在下面的示例中,OrderLineData的开始标记绑定到有效的名称空间前缀,但结束标记是未绑定的。如果我从xml中删除xmlns =“”,则step4输出格式良好的xml。这是形成错误的xml。

        真正     成功                                                                                                                                                                                                                                                                                                                                                                               

  5. 有关如何处理此类xml的任何提示?

1 个答案:

答案 0 :(得分:0)

您使用的是某些XSD生成的类吗?如果是,请确保在生成的包中有package-info.java类。该类负责名称空间处理,并在编组/解组过程中使用。