1

我正在使用 Spring WST 并使用 WCF SOAP 1.1 Web 服务。我使用 Apache 的 CXF Maven 插件从 WSDL 生成 Web 服务客户端。当我检查生成的类时,它看起来已经使用了 JAXB,并且此时一切都符合预期。

但是,当我向 Web 服务(通过 Spring WST)发送请求时,响应对象使用 Xerces ElementNSImpl 来表示响应。

这是正在发生的事情的一个例子;

  1. Apache CXF 生成对象名称 PersonResponseObject、PersonRequestObject
  2. 我填充 PersonRequestObject 并在 Spring WST 的帮助下提交
  3. WCF 服务按预期返回内容(我可以将 SOAP 响应打印到控制台),但是在解组期间,PersonResponseObject 被注入 Xerces 类型的 ElementNSImpl 类型。

在我看来,我需要在解组过程中明确强制使用 JAXB,但是我不确定这是否是我需要告诉 Spring Tenplate 或其他地方的事情。

任何熟悉这个问题并有任何建议的人?返回的 XML 示例

<?xml version="1.0" encoding="utf-8"?>

<PersonResponseObject xmlns="http://tempuri.org/">
  <PersonResponseObjectResult>
    <xs:schema xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" id="NewDataSet">
      <xs:element msdata:IsDataSet="true" msdata:UseCurrentLocale="true" name="NewDataSet">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element name="Table">
              <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="0" name="ActivityName" type="xs:string" />
                  <xs:element minOccurs="0" name="ActivityDesc" type="xs:string" />
                  <xs:element minOccurs="0" name="Activityid" type="xs:int" />
                  <xs:element minOccurs="0" name="code" type="xs:string" />
                  <xs:element minOccurs="0" name="Status" type="xs:string" />
                  <xs:element minOccurs="0" name="PlanDate" type="xs:string" />
                  <xs:element minOccurs="0" name="Duedate" type="xs:string" />
                  <xs:element minOccurs="0" name="IsRequired" type="xs:unsignedByte" />
                  <xs:element minOccurs="0" name="ReqStatus" type="xs:int" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      <NewDataSet xmlns="">
4

1 回答 1

0

这是一个疯狂的混合XML。它返回一些 XML,其中嵌套了一个模式。这意味着 XML 内容可能是动态的(谷歌搜索 Diffgram 看起来像是返回任意关系数据库数据)。我怀疑使用开箱即用的 JAXB 是否会带来很多好运。至少,您需要将一些返回的模式保存到 XML 文件中,然后为它们生成新的 JAXB 对象。

于 2013-11-14T16:21:18.863 回答