传智播客-web service(4)-利用jdk6开发WS应用

java开发web service最简单的方式是用jdk6自带的支持web service的注解功能。

 

1、编写代码如下:
@WebService(serviceName="HelloWorldService", targetNamespace="www.itcast.cn")
public class HelloWorldService {
 @WebMethod
 public String sayHello(String name){
  System.out.println(name);
  return "Hello, " + name;
 }
 
 public static void main(String[] args) {
  //终端,发布web service,参数1是服务公开的访问地址address,参数2是服务的具体实现implement
  Endpoint.publish("
http://localhost:7070/HelloWorldService", new HelloWorldService());
  
 }
}
其中,targetNamespace的默认值是service类所在包名,当然也可以手动赋值。但是要想通过targetNamespace直接在浏览器里访问,还需要特别配置。如果不加载到web容器中,可以在host系统文件里添加“127.0.0.1  www.itcast.cn”,不过这样访问的话还需要在“www.itcast.cn”后加端口(端口是自定义的,随意)才能访问;如果加载到tomcat这样的容器里访问,可以在tomcat系统文件中通过类似配置实现。tomcat可以连同端口一起配置到虚拟域名中,windowsXP的host文件可能也有这样的配置,欲知详情,请自行google百度。

 

2、运行代码,一般java app运行方式即可。可以看到运行后进程和启ServerSocket服务程序一样一直出于开启状态。不过要注意jdk6的具体版本。如果是jdk6u10以下的版本,直接运行应该会报错“Wrapper class cn.itcast.jdkws.service.jaxws.SayHello is not found. Have you run APT to generate them?”,这时必须先用apt命令将主程序(service类)进行编译,然后生成一些java文件到jaxws目录下,再运行主程序即可。如果是jdk6u16及以上版本,直接运行,不会报错。

 

3、打开浏览器,输入“http://localhost:7070/HelloWorldService”,回车,此时页面可能是“Web Services No JAX-WS context information available.”这样的信息。一般浏览器不能直接访问WS程序,不过所有的WS都可以生成WSDL文档供一般浏览器访问,方式是在地址后面加上“?wsdl”即可。WSDL文档中的<soap:xxx>即前文说的“soap信封”。生成的文档如下:
<?xml version="1.0" encoding="UTF-8" ?>
- <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
  -->
- <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6.
  -->
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.jdkws.itcast.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.jdkws.itcast.cn/" name="HelloWorldService">
 - <types>
  - <xsd:schema>
   <xsd:import namespace="http://www.itcast.cn/" schemaLocation="http://localhost:7070/HelloWorldService?xsd=1" />
  </xsd:schema>
   </types>
 - <message name="sayHello">
  <part name="parameters" element="tns:sayHello" />
 </message>
 - <message name="sayHelloResponse">
  <part name="parameters" element="tns:sayHelloResponse" />
 </message>
 - <portType name="HelloWorldService">
  - <operation name="sayHello">
   <input message="tns:sayHello" />
   <output message="tns:sayHelloResponse" />
  </operation>
 </portType>
 - <binding name="HelloWorldServicePortBinding" type="tns:HelloWorldService">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
  - <operation name="sayHello">
   <soap:operation soapAction="" />
   - <input>
    <soap:body use="literal" />
   </input>
   - <output>
    <soap:body use="literal" />
   </output>
  </operation>
 </binding>
 - <service name="HelloWorldService">
  - <port name="HelloWorldServicePort" binding="tns:HelloWorldServicePortBinding">
   <soap:address location="http://localhost:7070/HelloWorldService" />
  </port>
 </service>
</definitions>

 

4、不过IDE提供了WS explorer工具开启WS客户端,极大方便了WS的测试。Eclipse和MyEclipse都有这个工具:
WS explorer--> 点击右上角的WSDL Page小图标(本代码中)--> 右边单元中WSDL URL Browse下的文本框中输入“http://localhost:7070/HelloWorldService?wsdl”-->Go!-->展开左边单元节点,点击sayHello-->点击右单元arg0后面的add,输入参数“tom”-->Go!


可以看到下面出现了body内容,展开body,有返回值“Hello tom”。点击下单元右上角的source,可以看到具体的soap信封封装的请求响应中传输的xml数据信息。而且此时控制台也打印出了tom。

 

其实整个上述过程并没有用到tomcat,但是为什么可以通过WS explorer以浏览器形式访问service呢?因为jdk6的Endpoint类的实现里封装一个微型的web容器。不过正如前面所说,WS explorer是IDE提供的WS测试工具,可以通过其查看WS的流程、机制,但是生产环境下不应依赖于它。而且jdk6的WS支持还不那么稳定,所以现在生产环境下并不采用jdk6开发WS,入入门还可以,也许稳定以后就可以了。

 

5、MyEclipse还有个自带的工具(eclipse的没找到,不知道有没有)--TCP/IP Monitor也可以查看WS传输信息。不过这时的访问地址应该改为TCP/IP Monitor里设置的监听地址。
(1)window-->preferences-->myeclipse enterprise workbench-->internet tools-->TCP/IP Monitor,设置监听器,别忘了点击start启动监听。
(2)window-->show view-->other-->myeclipse common-->TCP/IP Monitor,显示TCP/IP Monitor视窗。
(3)更改上述wsdl文档并另存到e盘,更改的是访问地址,改为监听地址。
(4)删除前述WS explorer信息,重新访问,不过得手动输入URL:file:e:/xxx.wsdl-->Go!(file表示文件协议,不能省略;后续内容参照步骤4)此时就可以看到TCP/IP Monitor视图里的请求响应信息了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值