JAVA soap方式获取WebService的全部方法名

废话不多说 直接上代码:

maven 库: 或者下载后 自己取出jar包用

<!-- soap  -->
        <dependency>
            <groupId>com.xkcoding</groupId>
            <artifactId>soap-builder</artifactId>
            <version>0.0.2</version>
        </dependency>

测试main方法 类可以直接跑 测试地址是天气预报的WebService

import org.reficio.ws.builder.SoapBuilder;
import org.reficio.ws.builder.SoapOperation;
import org.reficio.ws.builder.core.Wsdl;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class GetWebServiceFunction {
    public static List<String> getBindingOperations(String wsdlUrl) {
        List<String> operationList = new ArrayList();
        List<SoapOperation> soapOperationList = new ArrayList();
        Wsdl parser = Wsdl.parse(wsdlUrl);
        List<QName> bindQnames = parser.getBindings();
        for (QName qName : bindQnames) {
            SoapBuilder soapBuilder = parser.binding().localPart(qName.getLocalPart()).find();
            soapOperationList.addAll(soapBuilder.getOperations());
        }
        for (SoapOperation soapOperation : soapOperationList) {
            //operationList.add(soapOperation.getOperationName());
            operationList.add(soapOperation.getOperationName());
        }
        return operationList;
    }

    public static void main(String[] args) {
        List<String> bindingOperations = GetWebServiceFunction.getBindingOperations("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
        System.out.println(bindingOperations);
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中使用SOAP客户端调用Web服务并传递对象参数,需要遵循以下步骤: 1. 通过wsimport工具生成客户端代码。 2. 创建包含对象属性的类,该类必须是可序列化的,即需要实现Serializable接口。 3. 创建SOAP消息,并将对象参数添加到SOAP Body中。可以使用JAXB将对象序列化为XML。 4. 发送SOAP消息到Web服务,并解析响应消息。 示例代码: 1. 通过wsimport工具生成客户端代码。 首先需要使用wsimport工具根据WSDL文件生成客户端代码。在命令行中执行以下命令: ``` wsimport -keep http://localhost:8080/WebService?wsdl ``` 其中,-keep选项表示生成的Java文件保存在当前目录中。 2. 创建包含对象属性的类。 假设需要传递的对象是Person,具有姓和年龄两个属性: ``` public class Person implements Serializable { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 3. 创建SOAP消息。 使用JAXB将Person对象序列化为XML,并添加到SOAP消息的Body中: ``` // 创建JAXB上下文 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext.createMarshaller(); // 序列化Person对象为XML Person person = new Person(); person.setName("张三"); person.setAge(20); StringWriter writer = new StringWriter(); marshaller.marshal(person, writer); String xml = writer.toString(); // 创建SOAP消息 MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); body.addDocument(new ByteArrayInputStream(xml.getBytes())); ``` 4. 发送SOAP消息到Web服务。 使用生成的客户端代码创建WebService对象,并调用对应的方法: ``` // 创建WebService对象 URL url = new URL("http://localhost:8080/WebService"); WebService service = new WebService(url); // 调用WebService方法 SOAPMessage response = service.call(soapMessage); ``` 其中,WebService是使用wsimport生成的客户端代码中的类。call方法用于发送SOAP消息,并返回响应消息。 5. 解析响应消息。 从响应消息的Body中获取返回的数据: ``` SOAPBody responseBody = response.getSOAPBody(); Node responseNode = responseBody.getFirstChild(); String responseXml = responseNode.getTextContent(); // 反序列化XML为对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(responseXml); Person result = (Person) unmarshaller.unmarshal(reader); ``` 完整的代码示例: ``` public class SoapClient { public static void main(String[] args) throws Exception { // 创建JAXB上下文 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext.createMarshaller(); // 序列化Person对象为XML Person person = new Person(); person.setName("张三"); person.setAge(20); StringWriter writer = new StringWriter(); marshaller.marshal(person, writer); String xml = writer.toString(); // 创建SOAP消息 MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody(); body.addDocument(new ByteArrayInputStream(xml.getBytes())); // 创建WebService对象 URL url = new URL("http://localhost:8080/WebService"); WebService service = new WebService(url); // 调用WebService方法 SOAPMessage response = service.call(soapMessage); // 解析响应消息 SOAPBody responseBody = response.getSOAPBody(); Node responseNode = responseBody.getFirstChild(); String responseXml = responseNode.getTextContent(); // 反序列化XML为对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(responseXml); Person result = (Person) unmarshaller.unmarshal(reader); System.out.println(result.getName()); System.out.println(result.getAge()); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值