1. 程式人生 > >wsdl-soap 客戶端

wsdl-soap 客戶端

結合springboot的ws的客戶端

1. 配置 請求服務(結合springboot-ws的wsdl地址,去掉後面,就是服務地址)

client:
  default-uri: http://localhost:9090/codenotfound/ws/helloworld

2. clientconfig檔案(pom 參考另一篇)

package com.codenotfound.ws.client;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.ws.client.core.WebServiceTemplate;

@Configuration
public class ClientConfig {

  @Value("${client.default-uri}")
  private String defaultUri;

  @Bean
  Jaxb2Marshaller jaxb2Marshaller() {
    Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
    jaxb2Marshaller.setContextPath("com.codenotfound.types.helloworld");

    return jaxb2Marshaller;
  }

  @Bean
  public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
    webServiceTemplate.setMarshaller(jaxb2Marshaller());
    webServiceTemplate.setUnmarshaller(jaxb2Marshaller());
    webServiceTemplate.setDefaultUri(defaultUri);

    return webServiceTemplate;
  }
}
package com.codenotfound.ws.client;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.ws.client.core.WebServiceTemplate;

import com.codenotfound.types.helloworld.Greeting;
import com.codenotfound.types.helloworld.ObjectFactory;
import com.codenotfound.types.helloworld.Person;

@Component
public class HelloWorldClient {

  private static final Logger LOGGER = LoggerFactory.getLogger(HelloWorldClient.class);

  @Autowired
  private WebServiceTemplate webServiceTemplate;

  public String sayHello(String firstName, String lastName) {
    ObjectFactory factory = new ObjectFactory();
    Person person = factory.createPerson();

    person.setFirstName(firstName);
    person.setLastName(lastName);

    LOGGER.info("Client sending person[firstName={},lastName={}]", person.getFirstName(),
        person.getLastName());

    Greeting greeting = (Greeting) webServiceTemplate.marshalSendAndReceive(person);

    LOGGER.info("Client received greeting='{}'", greeting.getGreeting());
    return greeting.getGreeting();
  }
}

wsdl生成soap,使用httpclient 傳送

package sample.wsdl;
 
import groovy.xml.MarkupBuilder;
import java.io.StringWriter;
import java.util.HashMap;
 
import com.predic8.wsdl.*;
import com.predic8.wstool.creator.*;
 
public class CreateSOAPRequest {
 
  public static void main(String[] args) {
 
    WSDLParser parser = new WSDLParser();
     
    Definitions wsdl = parser.parse("resources/article/article.wsdl");
或者
    // Definitions defs = parser.parse("http://www.thomas-bayer.com/axis2/services/BLZService?wsdl");
 
    StringWriter writer = new StringWriter();
     
    HashMap<String, String> formParams = new HashMap<String, String>();
    formParams.put("xpath:/create/article/name", "foo");
    formParams.put("xpath:/create/article/description", "bar");
    formParams.put("xpath:/create/article/price/amount", "00.00");
    formParams.put("xpath:/create/article/price/currency", "USD");
    formParams.put("xpath:/create/article/id", "1");
     
    //SOARequestCreator constructor: SOARequestCreator(Definitions, Creator, MarkupBuilder)
    SOARequestCreator creator = new SOARequestCreator(wsdl, new RequestCreator(), new MarkupBuilder(writer));
    creator.setFormParams(formParams);
     
    //creator.createRequest(PortType name, Operation name, Binding name);
    creator.createRequest("ArticleServicePT", "create", "ArticleServicePTBinding");
 
    System.out.println(writer);
  }
}