Web services 在spring客户端中向soap头添加安全详细信息

Web services 在spring客户端中向soap头添加安全详细信息,web-services,soap,spring-ws,Web Services,Soap,Spring Ws,我正在尝试使用SpringWS模板作为客户端使用SOAP(外部系统)web服务 我需要将头信息(安全细节)作为头和soap消息一起传递 我尝试使用JavaXMLSOAPMessage(javax.xml.soap.SOAPMessage)将该信息添加到标题中,并尝试在添加标题详细信息之后将其转换为springSOAPMessage(org.springframework.ws.soap.SOAPMessage) 但它不能强制转换它,因为它们都不在继承权中,所以得到类强制转换异常 请帮助我如何在S

我正在尝试使用SpringWS模板作为客户端使用SOAP(外部系统)web服务

我需要将头信息(安全细节)作为头和soap消息一起传递

我尝试使用JavaXMLSOAPMessage(javax.xml.soap.SOAPMessage)将该信息添加到标题中,并尝试在添加标题详细信息之后将其转换为springSOAPMessage(org.springframework.ws.soap.SOAPMessage)

但它不能强制转换它,因为它们都不在继承权中,所以得到类强制转换异常

请帮助我如何在SpringSOAP消息中传递头信息的安全详细信息

我的代码如下

   public void doWithMessage(WebServiceMessage message) throws IOException,
                                    TransformerException

    SaajSoapMessage saajSoapMessage =(SaajSoapMessage)message;      
    SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPHeader soapHeader = soapEnvelope.getHeader();
    Name headerElementName = soapEnvelope.createName("Security","wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

    // Add "Security" soapHeaderElement to soapHeader
    SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(headerElementName);

    // This may be important for some portals!
    soapHeaderElement.setActor(null);

    // Add usernameToken to "Security" soapHeaderElement 
    SOAPElement usernameTokenSOAPElement = soapHeaderElement.addChildElement("UsernameToken");

    // Add username to usernameToken
    SOAPElement userNameSOAPElement = usernameTokenSOAPElement.addChildElement("Username");
    userNameSOAPElement.addTextNode("myUserName");          
    // Add password to usernameToken
    SOAPElement passwordSOAPElement = usernameTokenSOAPElement.addChildElement("Password");

    passwordSOAPElement.addTextNode("myPassword");
    ((SoapMessage) soapMessage).setSoapAction("GetMetaDataLookUpRequestType");//exception while casting
}
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://emc.com/it/enterprise/contract/CMCContractLookupService/v1" xmlns:v11="http://emc.com/it/enterprise/data/v1">
   <soapenv:Header>
   <wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

         <wsse:UsernameToken wsu:Id="UsernameToken-20">
            <wsse:Username>xxxx</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxx</wsse:Password>

          </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>

      <v1:GetContractMetaDataLookUpRequest>
         <v11:GetMetaDataLookUpRequestDocument>
            <v11:ContractID>123456</v11:ContractID>
             <v11:BadgeID>1</v11:BadgeID>

         </v11:GetMetaDataLookUpRequestDocument>
      </v1:GetContractMetaDataLookUpRequest>
   </soapenv:Body>
</soapenv:Envelope>
我的请求xml如下所示

   public void doWithMessage(WebServiceMessage message) throws IOException,
                                    TransformerException

    SaajSoapMessage saajSoapMessage =(SaajSoapMessage)message;      
    SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPHeader soapHeader = soapEnvelope.getHeader();
    Name headerElementName = soapEnvelope.createName("Security","wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

    // Add "Security" soapHeaderElement to soapHeader
    SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(headerElementName);

    // This may be important for some portals!
    soapHeaderElement.setActor(null);

    // Add usernameToken to "Security" soapHeaderElement 
    SOAPElement usernameTokenSOAPElement = soapHeaderElement.addChildElement("UsernameToken");

    // Add username to usernameToken
    SOAPElement userNameSOAPElement = usernameTokenSOAPElement.addChildElement("Username");
    userNameSOAPElement.addTextNode("myUserName");          
    // Add password to usernameToken
    SOAPElement passwordSOAPElement = usernameTokenSOAPElement.addChildElement("Password");

    passwordSOAPElement.addTextNode("myPassword");
    ((SoapMessage) soapMessage).setSoapAction("GetMetaDataLookUpRequestType");//exception while casting
}
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://emc.com/it/enterprise/contract/CMCContractLookupService/v1" xmlns:v11="http://emc.com/it/enterprise/data/v1">
   <soapenv:Header>
   <wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

         <wsse:UsernameToken wsu:Id="UsernameToken-20">
            <wsse:Username>xxxx</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxx</wsse:Password>

          </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>

      <v1:GetContractMetaDataLookUpRequest>
         <v11:GetMetaDataLookUpRequestDocument>
            <v11:ContractID>123456</v11:ContractID>
             <v11:BadgeID>1</v11:BadgeID>

         </v11:GetMetaDataLookUpRequestDocument>
      </v1:GetContractMetaDataLookUpRequest>
   </soapenv:Body>
</soapenv:Envelope>

xxxx
xxxx
123456
1.
我需要的帮助主要是关于如何将头信息(如上面的xml请求所示)添加到soap头消息中


非常感谢您的帮助。谢谢。

这应该是
saajSoapMessage.setSoapAction(“GetMetaDataLookUpRequestType”)
而不是
((SoapMessage)SoapMessage.setSoapAction(“GetMetaDataLookUpRequestType”)