wsdl-soap 客戶端
阿新 • • 發佈:2018-12-09
結合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); } }