玩转WebService -- 用Intellij IDEA + java搭建WebService项目并演示请求响应

上篇博客给大家整理了WebService的基本概念及组成元素,对概念或原理还不太清楚的可以去看看。

这篇我们用Intellij IDEA来搭建一个WebService,并看看如何请求。

首先,new project, 选择WebService项目,并选择Apache Axis:

 

点击next,随便去个项目名称,比如webservice。

finish之后,会有一些示例文件,默认有一个HelloWorld类,这个类里面有个方法sayHelloWorldFrom(String from)

这是一个很简单的java方法,我们通过这个简单的java方法来看看WebService的结构和用法。

在这个类里面右键 -> WebService 生成wsdl文件:

 

生成好了之后,在HelloWorld.java同一个包下有一个.wsdl文件,打开这个文件。

这个WSDL由五个部分组成,分别是service, binding, portType, message, types.

service里面主要描述这个服务接口路径,相当于REST里面定义了一个API:

<wsdl:service name="HelloWorldService">

   <wsdl:port binding="impl:HelloWorldSoapBinding" name="HelloWorld">

      <wsdlsoap:address location="http://localhost:8080/services/HelloWorld"/>

   </wsdl:port>

</wsdl:service>

 

binding里面将Request和Response与SoapAction绑定到了一起:

<wsdl:binding name="HelloWorldSoapBinding" type="impl:HelloWorld">



   <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>



   <wsdl:operation name="sayHelloWorldFrom">



      <wsdlsoap:operation soapAction="test"/>



      <wsdl:input name="sayHelloWorldFromRequest">



         <wsdlsoap:body use="literal"/>



      </wsdl:input>



      <wsdl:output name="sayHelloWorldFromResponse">



         <wsdlsoap:body use="literal"/>



      </wsdl:output>



   </wsdl:operation>

 

端类型里面描述了这个接口(方法)的输入端(Request message)和输出端(Response message) 以及参数。

<wsdl:portType name="HelloWorld">



   <wsdl:operation name="sayHelloWorldFrom" parameterOrder="from">



      <wsdl:input message="impl:sayHelloWorldFromRequest" name="sayHelloWorldFromRequest"/>



      <wsdl:output message="impl:sayHelloWorldFromResponse" name="sayHelloWorldFromResponse"/>



   </wsdl:operation>



</wsdl:portType>

 

message里面定义的是Request的请求参数 和 Response的响应类型

<wsdl:message name="sayHelloWorldFromResponse">



   <wsdl:part element="impl:sayHelloWorldFromReturn" name="sayHelloWorldFromReturn"/>



</wsdl:message>



<wsdl:message name="sayHelloWorldFromRequest">



   <wsdl:part element="impl:from" name="from"/>



</wsdl:message>

 

types里面基本就是把请求和响应的类型给罗列出来了,一直描述到基本数据类型。

<wsdl:types>

 <schema elementFormDefault="qualified" targetNamespace="http://example" xmlns="http://www.w3.org/2001/XMLSchema">

  <element name="from" type="xsd:string"/>

  <element name="sayHelloWorldFromReturn" type="xsd:string"/>

 </schema>

</wsdl:types>

 

OK,现在请配置一下Tomcat,并将项目部署到Tomcat。注意,手动给项目加入这个依赖,不然访问会报错的。

 

在浏览器访问HelloWorld的wsdl:

http://localhost:8080/services/HelloWorld?wsdl

 

 

请求WebService

wsdl只是接口的描述语言,现在我们可以根据这些描述来封装SOAP请求了。

打开PostMan,或者SOAPUI以及其他Rest客户端。

Request URLhttp://localhost:8080/services/HelloWorld

 

Request Headers:

SoapAction: (留空即可)

Content-Type: application/xml

 

Request Body: (请遵守SOAP规范)

<?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <soapenv:Body>

        <sayHelloWorldFromReturn xmlns="http://example">Hello, world, from My WS Test</sayHelloWorldFromReturn>

    </soapenv:Body>

</soapenv:Envelope>

 

OK,请求成功,看到刚才接口的返回了。

可以试试定义更加复杂的参数或返回类型,里面加入更多的业务处理。

 

IntelliJ IDEA中调用2个webservice服务并集成,可以按照以下步骤进行操作: 1. 在IntelliJ IDEA中创建一个新的Java项目。 2. 在项目中创建两个包,用于存放两个webservice服务的客户端代理类。 3. 对于每个webservice服务,使用其WSDL文件生成客户端代理类,并将它们放置在相应的包中。 4. 在项目中创建一个新的Java类,用于集成两个webservice服务。 5. 在该Java类中创建两个代理类实例,并调用它们的方法。 6. 将两个webservice服务的数据集成在一起,并进行必要的处理。 以下是示例代码: ```java package com.example; import com.example.webservice1.MyService1; import com.example.webservice2.MyService2; public class Main { public static void main(String[] args) { // 创建webservice1服务的代理类实例 MyService1 service1 = new MyService1(); MyService1PortType port1 = service1.getMyService1Port(); // 调用webservice1服务的方法 String result1 = port1.helloWorld("World"); // 创建webservice2服务的代理类实例 MyService2 service2 = new MyService2(); MyService2PortType port2 = service2.getMyService2Port(); // 调用webservice2服务的方法 String result2 = port2.helloWorld("World"); // 将两个webservice服务的数据集成在一起 String result = result1 + result2; // 进行必要的处理 System.out.println(result); } } ``` 在上面的示例代码中,我们创建了两个包,分别用于存放两个webservice服务的客户端代理类。然后,我们创建了一个Java类Main,用于集成两个webservice服务。在该类中,我们创建了两个代理类实例,并调用它们的方法。最后,我们将两个webservice服务的数据集成在一起,并进行必要的处理。 请注意,这只是一个示例代码,实际上,您可能需要根据具体的需求进行更改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值