当前位置: 代码迷 >> Web前端 >> WebService引文
  详细解决方案

WebService引文

热度:171   发布时间:2012-11-17 11:14:15.0
WebService注解
  在项目中使用使用Ws服务,同时采用JDK1.6于是学习一下JDK1.6发布Web服务的应用开发、发现使用JDK1.6注解ws方便简单。

    对Webservice的支持是JavaSE6的一大新特性。我们知道,想要发布一个Webservice,首先要创建相关的业务逻辑类,然后把这些业务逻辑类部署到SOAP服务器上,生成客户端访问的代码,最后部署到客户端进行测试。这是创建一个简单Webservice的主要步骤,事实上,部署和发布Webservice要复杂的多。而JavaSE6中实现了一个内置的轻量级SOAP服务器,我们可以把Webservice部署到Java平台中,并进行简单的测试。另外,JavaSE 6中加入了@Webservice等注解(Annotation),有了这些注解,创建Webservice变得十分简单。本实验将在JavaSE 6中创建和发布一个Webservice,并通过Netbeans创建Webservice客户端对已发布的Service进行测试,通过实验来理解JavaSE 6对Webservice的支持。

软件需求:
jdk 1.6以上版本



下面首先看看web服务的代码,然后讲解web服务的各种信息和注意事项;

^_^



开发的代码如下:

定义web服务的接口类

package cn.com.unutrip.spring.ws;

import javax.jws.WebService;
/**
*
* 此接口定义Web服务
* JDK1.6注解开发Ws服务
* @author longgangbai
*
*/
public interface IRemoteService {
public String hello(String username);
}



web服务的实现类:



package cn.com.unutrip.spring.ws;

import java.util.Date;

import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.soap.SOAPBinding;
/**
*
*
* JDK1.6注解开发Ws服务
* @author longgangbai
*
*/

@WebService(serviceName = "REMOTESERVICE", targetNamespace = "http://cn.unutrip.com/RemoteService")
@SOAPBinding(style = SOAPBinding.Style.RPC)//默认的方式
public class RemoteServiceImpl implements IRemoteService {

/**

*

*

*/





@WebResult(name = "Greetings")//注解返回的结果信息,可以使用默认值
@WebMethod  //注解web服务的方法
public String hello(@WebParam(name = "MyName")
String name) {
  return "Hello," + name;
}





@Oneway  //没有返回值
@WebMethod(action = "printSystemTime", operationName = "printSystemTime")
public void printTime() {
  System.out.println(new Date(System.currentTimeMillis()));
}

}



web服务的发布:



package cn.com.unutrip.spring.ws;

import javax.xml.ws.Endpoint;

/**
*
*
* JDK1.6注解开发Ws服务
*
* @author longgangbai
*
*/
public class WSPublish {
public static void main(String[] args) {
  Thread wsPublisher = new Thread(new WebServicePublish());
  wsPublisher.start();
}

private static class WebServicePublish implements Runnable {
  public void run() {

//发布web发Endpoint发布
   Endpoint.publish("http://localhost:8888/HelloService",
     new RemoteServiceImpl());
  }
}
}



访问路径如下:http://localhost:8888/HelloService?WSDL

访问的WSDL如下:

<?xml version="1.0" encoding="UTF-8" ?>
- <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://cn.unutrip.com/RemoteService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://cn.unutrip.com/RemoteService" name="REMOTESERVICE">
  <types />
- <message name="hello">
  <part name="MyName" type="xsd:string" />
  </message>
- <message name="helloResponse">
  <part name="Greetings" type="xsd:string" />
  </message>
  <message name="printSystemTime" />
- <portType name="RemoteServiceImpl">
- <operation name="hello" parameterOrder="MyName">
  <input message="tns:hello" />
  <output message="tns:helloResponse" />
  </operation>
- <operation name="printSystemTime">
  <input message="tns:printSystemTime" />
  </operation>
  </portType>
- <binding name="RemoteServiceImplPortBinding" type="tns:RemoteServiceImpl">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <operation name="hello">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" namespace="http://cn.unutrip.com/RemoteService" />
  </input>
- <output>
  <soap:body use="literal" namespace="http://cn.unutrip.com/RemoteService" />
  </output>
  </operation>
- <operation name="printSystemTime">
  <soap:operation soapAction="printSystemTime" />
- <input>
  <soap:body use="literal" namespace="http://cn.unutrip.com/RemoteService" />
  </input>
  </operation>
  </binding>
- <service name="REMOTESERVICE">
- <port name="RemoteServiceImplPort" binding="tns:RemoteServiceImplPortBinding">
  <soap:address location="http://localhost:8888/HelloService" />
  </port>
  </service>
  </definitions>





讲解:

注意代码中使用到的几个Annotation:

@WebService注解将 Java 类标记为实现Web Service类,或者将Java接口标记为定义Web Service接口,其中serviceName属性指定了Web Service的服务名称,当映射到WSDL时,此名称被用作 此名称被用作 wsdl:service 的名称。这一个注解对应的是javax.jws.WebService,我们可以在jdk1.6的API文档里查看到所有的属性和用法。



@WebResult指定Web Service返回的值和WSDL之间的映射。@WebMethod指定了Web Service中要暴露的方法。标记了@WebMethod的方法可以通过Web Service客户端来远程调用(RPC)。



@WebParam注解用来向Web Service传递参数的。注意,@WebMethod标注的方法必须带有返回类型,除非同时标注了@Oneway。



◎WebResult:注解放值的可以设置默认值的。如实例中。

注意使用Endpoint发布web服务信息。
  相关解决方案