我使用带有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需要执行以下步骤。
将POJO从第3步编组为xml 来自步骤4的所得xml不能很好地形成。在下面的示例中,OrderLineData的开始标记绑定到有效的名称空间前缀,但结束标记是未绑定的。如果我从xml中删除xmlns =“”,则step4输出格式良好的xml。这是形成错误的xml。
真正 成功
有关如何处理此类xml的任何提示?
答案 0 :(得分:0)
您使用的是某些XSD生成的类吗?如果是,请确保在生成的包中有package-info.java类。该类负责名称空间处理,并在编组/解组过程中使用。