首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JBossWS无法识别WS-A标头

JBossWS无法识别WS-A标头
EN

Stack Overflow用户
提问于 2013-04-22 17:31:25
回答 2查看 1.6K关注 0票数 0

我有一个用JAX-WS实现并部署在JBossAS 7上的web服务存根,下面是源代码:

代码语言:javascript
复制
package org.mycompany.adapters.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;

@WebService
@Addressing(enabled = true, required = true)
public class AdapterSessionManager {

    @WebMethod
    public String initAdapterSession() {
        return "hello";
    }
}

下面是JBoss为该web服务生成的WSDL:

代码语言:javascript
复制
<wsdl:definitions name="AdapterSessionManagerService" targetNamespace="http://ws.adapters.mycompany.org/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.adapters.mycompany.org/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <wsdl:types>
      <xs:schema elementFormDefault="unqualified" targetNamespace="http://ws.adapters.mycompany.org/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
         <xs:element name="initAdapterSession" type="tns:initAdapterSession"/>
         <xs:element name="initAdapterSessionResponse" type="tns:initAdapterSessionResponse"/>
         <xs:complexType name="initAdapterSession">
            <xs:sequence/>
         </xs:complexType>
         <xs:complexType name="initAdapterSessionResponse">
            <xs:sequence>
               <xs:element minOccurs="0" name="return" type="xs:string"/>
            </xs:sequence>
         </xs:complexType>
      </xs:schema>
   </wsdl:types>
   <wsdl:message name="initAdapterSessionResponse">
      <wsdl:part element="tns:initAdapterSessionResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="initAdapterSession">
      <wsdl:part element="tns:initAdapterSession" name="parameters"/>
   </wsdl:message>
   <wsdl:portType name="AdapterSessionManager">
      <wsdl:operation name="initAdapterSession">
         <wsdl:input message="tns:initAdapterSession" name="initAdapterSession" wsam:Action="http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSessionRequest" wsaw:Action="http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSessionRequest"/>
         <wsdl:output message="tns:initAdapterSessionResponse" name="initAdapterSessionResponse" wsam:Action="http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSessionResponse" wsaw:Action="http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSessionResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="AdapterSessionManagerServiceSoapBinding" type="tns:AdapterSessionManager">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsaw:UsingAddressing wsdl:required="true"/>
      <wsp:PolicyReference URI="#AdapterSessionManagerServiceSoapBinding_WSAM_Addressing_Policy"/>
      <wsdl:operation name="initAdapterSession">
         <soap:operation soapAction="" style="document"/>
         <wsdl:input name="initAdapterSession">
            <soap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="initAdapterSessionResponse">
            <soap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="AdapterSessionManagerService">
      <wsdl:port binding="tns:AdapterSessionManagerServiceSoapBinding" name="AdapterSessionManagerPort">
         <soap:address location="http://localhost:8081/adapters/AdapterSessionManager"/>
      </wsdl:port>
   </wsdl:service>
   <wsp:Policy wsu:Id="AdapterSessionManagerServiceSoapBinding_WSAM_Addressing_Policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <wsam:Addressing>
         <wsp:Policy/>
      </wsam:Addressing>
   </wsp:Policy>
</wsdl:definitions>

当我尝试使用以下SOAP请求调用initAdapterSession时:

代码语言:javascript
复制
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.adapters.mycompany.org/">
   <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
      <wsa:Action>http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSessionRequest</wsa:Action>
   </soapenv:Header>
   <soapenv:Body>
      <ws:initAdapterSession/>
   </soapenv:Body>
</soapenv:Envelope>

发生"A required header representing a Message Addressing Property is not present" SOAP错误:

代码语言:javascript
复制
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <Action xmlns="http://www.w3.org/2005/08/addressing">http://ws.adapters.mycompany.org/AdapterSessionManager/initAdapterSession/Fault/SoapFault</Action>
      <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:d5b5c6aa-fd66-49bd-b928-488fa8e07f7b</MessageID>
      <RelatesTo xmlns="http://www.w3.org/2005/08/addressing">http://www.w3.org/2005/08/addressing/unspecified</RelatesTo>
   </soap:Header>
   <soap:Body>
      <soap:Fault>
         <faultcode xmlns:ns1="http://www.w3.org/2005/08/addressing">ns1:MessageAddressingHeaderRequired</faultcode>
         <faultstring>A required header representing a Message Addressing Property is not present</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

SOAP请求由soapUI发送。soapUI首选项(WS-A settings选项卡)中的所有WS-A选项都被禁用。请求设置中的Enable WS-A addressing复选框也已关闭。实际上,即使启用了所有这些选项,也会发生相同的错误。

为什么JBoss在请求中看不到WS-A头?

EN

回答 2

Stack Overflow用户

发布于 2013-04-23 01:17:42

当SOAP消息没有所有必需的WS-Addressing头信息时,就会发生SOAP故障"A required header representing a Message Addressing Property is not present"。这不是JBoss特有的异常,我在WebSphere上也遇到过这种情况。

您的请求仅显示它正在发送Action标头。查看规范(http://www.w3.org/Submission/ws-addressing/#_Toc77464323),您似乎需要同时发送ActionTo标头。另一种选择是根本不发送任何WS-Addressing头部,但我猜测,根据您的WSDL,服务器可能不接受没有WS-Addressing的消息。

票数 1
EN

Stack Overflow用户

发布于 2013-04-23 18:25:31

只是发现缺少标题。如果通过SOAP请求传递wsa:MessageID,则不会出现故障。在我看来,这是一种奇怪的行为,因为wsa:MessageID在WS-A1.0规范中被描述为可选头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16143723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档