【问题标题】:Jaxb outputting invalid Xml when data contains xmlns=""当数据包含 xmlns="" 时,Jaxb 输出无效的 Xml
【发布时间】:2015-04-27 05:20:01
【问题描述】:

我使用带有 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. 将步骤 3 中的 POJO 编组为 xml 步骤 4 生成的 xml 格式不正确。在下面的示例中,OrderLineData 的开始标记绑定到有效的命名空间前缀,但结束标记未绑定。如果我从 xml 中删除 xmlns="" 则 step4 输出格式正确的 xml。这是格式错误的xml。

    真的 成功

关于如何处理此类 xml 的任何提示?

【问题讨论】:

标签: xml-namespaces jaxb2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2023-03-16
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多