小编Vis*_*ari的帖子

如何从请求中读取SOAP标头信息并将其添加到spring Web服务中的响应中

我正在研究春季网络服务.我需要在请求和响应消息中添加一些自定义元素.它应该如下所示:

<soapenv:Envelope>
   <soapenv:Header>
      <tid:SplsTID>
         <tid:Trantype>123</tid:Trantype>
         <tid:Tranver>234</tid:Tranver>
      </tid:SplsTID>
   </soapenv:Header>
   <soapenv:Body>
      <get:GetOrderNumberRequest LoggingLevel="REGULAR" MonitorFlag="Y">
         <get:Header>
            <get:TransactionId>111</get:TransactionId>
            <get:SourceSystemId>SOMS</get:SourceSystemId>
            <get:DateTime>2011-11-11T11:11:11</get:DateTime>
         </get:Header>
         <get:Body>
            <get:StaplesOrderNumber RangeFlag="N" ReleaseFlag="N">
               <get:OrderNumber Count="1" End="11" Start="9"/>
            </get:StaplesOrderNumber>
         </get:Body>
      </get:GetOrderNumberRequest>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我能够追加<tid:SplsTID><soapenv:Header>通过修改WSDL文件的请求.看起来像这样:

<wsdl:message name="GetOrderNumberRequest">
        <wsdl:part element="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
        </wsdl:part>
        <wsdl:part element="sch1:SplsTID" name="SplsTID">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="GetOrderNumberResponse">
        <wsdl:part element="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
        </wsdl:part>
        <wsdl:part element="sch1:SplsTID" name="SplsTID">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="ONAS">
        <wsdl:operation name="GetOrderNumber">
            <wsdl:input message="tns:GetOrderNumberRequest" name="GetOrderNumberRequest">
            </wsdl:input>
            <wsdl:output message="tns:GetOrderNumberResponse" name="GetOrderNumberResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
Run Code Online (Sandbox Code Playgroud)

问题是,我想<tid:SplsTID>从请求中读取部分并希望将其附加到响应的soap标题部分,这是没有发生的.我正在使用基于注释的终点.什么是读取soap标头的代码,并在响应中附加相同的代码.

目前我的终点课是:

@Endpoint
public class OrderNumberServiceEndPoint { …
Run Code Online (Sandbox Code Playgroud)

soap web-services spring-ws soapheader

5
推荐指数
2
解决办法
3万
查看次数

如何将JAXBElement作为SOAP消息的SOAPBody的子项追加

如何将JAXBElement作为SOAP消息的SOAPBody的子项追加.我在我的Web服务端点方法中尝试做的是:

    SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest();
    SOAPBody soapBody=soapRequest.getSaajMessage().getSOAPBody();
    ObjectFactory of=new ObjectFactory();
    SplsTID tid=new SplsTID();
    JAXBElement<SplsTID> element=of.createSplsTID(tid);
    element.soapBody.appendChild(element);
Run Code Online (Sandbox Code Playgroud)

然后我得到了java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to org.w3c.dom.Element.

我正在使用spring-WS并使用jaxb marshaller.我们应该怎么做?

java soap spring-ws jaxb

2
推荐指数
2
解决办法
8595
查看次数

标签 统计

soap ×2

spring-ws ×2

java ×1

jaxb ×1

soapheader ×1

web-services ×1