Java 如何接受SOAP头部件上的mustUnderstand和其他属性?

Java 如何接受SOAP头部件上的mustUnderstand和其他属性?,java,web-services,soap,wsdl,Java,Web Services,Soap,Wsdl,我有一个用于基于soap的web服务的WSDL,其中包含一个自定义头: <message name="Request"> <part element="common:Request" name="Request"></part> <part element="common:myHeader" name="Header"></part> </message> <operation name="proce

我有一个用于基于soap的web服务的WSDL,其中包含一个自定义头:

<message name="Request">
    <part element="common:Request" name="Request"></part>
    <part element="common:myHeader" name="Header"></part>
</message>

<operation name="processRequest">
    <soap:operation soapAction=""/>
    <input>
        <soap:body parts="Request" use="literal"/>
        <soap:header message="tns:Request" part="Header" use="literal"></soap:header>
    </input>
    <output>
        <soap:body use="literal"/>
    </output>
</operation>

由于我的消费者正在使用的工具,修改Axis生成的存根以忽略这些属性是不可行的,正如其他地方所建议的那样。此外,如果我要声明自己是soap服务,那么我的服务似乎应该允许这些属性。我的问题是,如何修改标题定义以适应这些可选属性,并在理想情况下规划我可能没有预料到的属性。是否有一个标准类型可以扩展用于标题类型定义,或者有一个通用的最佳实践用于此情况?

是的,您可以使用编辑器进行修改。功能性使用30天。

是的,您可以使用编辑器进行修改。功能性使用30天。

今天我找到了解决问题的两种方法。它们都解决了问题,但我不确定哪一个更好,所以我将在这里介绍它们

这两种解决方案都以修改
myHeaderType
的定义为中心,以便它能够容纳意外的SOAP定义的属性

  • 在SOAP WSDL模式定义()中,有一个名为
    tExtensibleAttributesDocumented
    的类型,包括以下非常灵活的属性定义:

    <xs:anyAttribute namespace="##other" processContents="lax"/>
    
    据我所知,这基本上有相同的效果


  • 如果我不知道这些解决方案之间有什么细微的差别,我很乐意听听。如果对这种情况有一个公认的标准,我就找不到。这个解决方案的另一个缺点是,我无法根据模式中的属性定义来验证属性。将
    processContents
    属性更改为
    strict
    ,即使是定义良好的
    mustUnderstand
    actor
    属性也无法被处理。

    我今天能够找到解决问题的两个方法。它们都解决了问题,但我不确定哪一个更好,所以我将在这里介绍它们

    这两种解决方案都以修改
    myHeaderType
    的定义为中心,以便它能够容纳意外的SOAP定义的属性

  • 在SOAP WSDL模式定义()中,有一个名为
    tExtensibleAttributesDocumented
    的类型,包括以下非常灵活的属性定义:

    <xs:anyAttribute namespace="##other" processContents="lax"/>
    
    据我所知,这基本上有相同的效果


  • 如果我不知道这些解决方案之间有什么细微的差别,我很乐意听听。如果对这种情况有一个公认的标准,我就找不到。这个解决方案的另一个缺点是,我无法根据模式中的属性定义来验证属性。将
    processContents
    属性更改为
    strict
    ,即使是定义良好的
    mustUnderstand
    actor
    属性也无法被处理。

    我真的在寻找一个指针,说明如何更好地编写XML以适应这种情况,而不是生成它或将它隐藏在GUI后面的工具。我今天取得了一些成功,所以我将为后人发布我的答案。我实际上是在寻找如何更好地编写XML以适应这种情况的指针,而不是生成XML或将其隐藏在GUI后面的工具。我今天取得了一些成功,所以我将把我的答案留给后人。
    <xs:anyAttribute namespace="##other" processContents="lax"/>
    
      <xs:complexType name="myHeaderType">
          <xs:complexContent>
              <xs:extension base="wsdl:tExtensibleAttributesDocumented">
                  <xs:sequence minOccurs="1" maxOccurs="1">
                      <xs:element name="JobID" type="tns:JobIDType" minOccurs="1" maxOccurs="1"/>
                      <xs:element name="TransactionID" type="xs:string" minOccurs="1" maxOccurs="1"/>
                  </xs:sequence>
              </xs:extension>
          </xs:complexContent>
      </xs:complexType>
    
      <xs:complexType name="myHeaderType">
          <xs:sequence minOccurs="1" maxOccurs="1">
              <xs:element name="JobID" type="tns:JobIDType" minOccurs="1" maxOccurs="1"/>
              <xs:element name="TransactionID" type="xs:string" minOccurs="1" maxOccurs="1"/>
          </xs:sequence>
          <xs:anyAttribute namespace="##other" processContents="lax"/>
      </xs:complexType>