Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Webservice模板:如何在Webservice模板中传递头_Java_Web Services_Soap_Soap Client_Webservice Client - Fatal编程技术网

Java Webservice模板:如何在Webservice模板中传递头

Java Webservice模板:如何在Webservice模板中传递头,java,web-services,soap,soap-client,webservice-client,Java,Web Services,Soap,Soap Client,Webservice Client,我在企业级使用以下SOAP请求 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> .... </soapenv:Header> <soapenv:Body> <UserRQ xmlns="http://www.user.org/USER/INFO&q

我在企业级使用以下SOAP请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
      ....
  </soapenv:Header>
   <soapenv:Body>
<UserRQ xmlns="http://www.user.org/USER/INFO" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
  ...

....
...
为了使用postman(或其他)来访问API,我正在使用WebServiceClient,目前正在将整个请求(包括头和正文)传递给它

ApplicationClient.java

    public class ApplicationClient extends WebServiceGatewaySupport  {
       
        //Envelope is the whole request
        public ResponseEntity<String> getResults(Envelope envelope) {
            WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
            Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
            marshaller.setContextPath("org.test.wsdl");
            webServiceTemplate.setMarshaller(marshaller);
            webServiceTemplate.setUnmarshaller(marshaller);
          
            ResponseEntity<String> response = (ResponseEntity<String>) webServiceTemplate.marshalSendAndReceive("<URL>", envelope);
            log.info(response.getStatusCode());
            return response;
        }
    }
    
公共类应用程序客户端扩展了WebServiceGatewaySupport{
//信封就是整个请求
公共响应获取结果(信封){
WebServiceTemplate WebServiceTemplate=新的WebServiceTemplate();
Jaxb2Marshaller-marshaller=新的Jaxb2Marshaller();
setContextPath(“org.test.wsdl”);
setMarshaller(marshaller);
setUnmarshaller(marshaller);
ResponseEntity response=(ResponseEntity)webServiceTemplate.MarshallSendReceive(“,信封”);
log.info(response.getStatusCode());
返回响应;
}
}

响应正确(得到200个响应代码)。是否仍然可以通过webservice客户端分别传递标题和正文?或者,我们如何整理标题?

在Web服务调用中无法分别传递标题和正文。相反,有一些机制可以改变构造的消息,我们可以利用这些机制向报头添加身份验证,也可以向报头添加自定义元素。为此,我们需要额外的SpringWS依赖项

<dependency>
    <groupId>org.springframework.ws</groupId>
    <artifactId>spring-ws-security</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.ws</groupId>
    <artifactId>spring-ws-support</artifactId>
    <version>3.0.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.wss4j</groupId>
    <artifactId>wss4j-parent</artifactId>
    <version>2.3.0</version>
    <type>pom</type>
</dependency>
然后添加WebServiceMessageCallback实例以覆盖完成的消息

webServiceTemplate.marshalSendAndReceive(url, request, new CustomWebServiceMessageCallback());
在CustomWebServiceMessageCallback内部,通过使用以下方法,我们可以访问标头并对其进行修改

@Override
public void doWithMessage(WebServiceMessage webServiceMessage) throws IOException, TransformerException {
   SoapMessage soapMessage = (SoapMessage) webServiceMessage;
   SoapHeader header = soapMessage.getSoapHeader();
   StringSource headerSource = new StringSource("<additional-header-element>HEADER_TEXT</additional-header-element>");
   Transformer transformer =   TransformerFactory.newInstance().newTransformer();
   transformer.transform(headerSource, header.getResult());
}
@覆盖
public void doWithMessage(WebServiceMessage WebServiceMessage)引发IOException、TransformerException{
SoapMessage SoapMessage=(SoapMessage)webServiceMessage;
SoapHeader=soapMessage.getSoapHeader();
StringSource headerSource=新的StringSource(“标题文本”);
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(headerSource,header.getResult());
}
@Override
public void doWithMessage(WebServiceMessage webServiceMessage) throws IOException, TransformerException {
   SoapMessage soapMessage = (SoapMessage) webServiceMessage;
   SoapHeader header = soapMessage.getSoapHeader();
   StringSource headerSource = new StringSource("<additional-header-element>HEADER_TEXT</additional-header-element>");
   Transformer transformer =   TransformerFactory.newInstance().newTransformer();
   transformer.transform(headerSource, header.getResult());
}