JAX-WS(java WebService编程)第一篇

1.通过MyEclipse创建基于JAX-WS的WebService

1.1创建webService服务端项目

如图中所示创建一个WebService项目

1.1创建服务类

1.1.1创建一个普通类

在创建了WebService项目后,我们便可以在项目中创建我们自己的类了。

我们创建一个Products.java类,在其中有一个public方法通过这个方法,我们可以取得一个书名的list列表
	public List<String> getAllProduct(){
		List<String> product = new ArrayList<String>();
		product.add("java核心技术");
		product.add("javaEE开发速成");
		product.add("SOA面向方面架构");
		return product;
	}



1.1.2将类发布为webService服务类

选中WebService项目,单击鼠标右键new一个web service(如下图所示),因为我们创建的是服务端,所以我们选择Web Service选项
单击next,如下图所示,因为我们创建的是基于JAX-WS的项目,所以在framework处选择JAX-WS,在Strategy的选择上,我们选择从java类创建服务类,所以选择第二个。
选择需要转换成服务的java类,如果我们选中Generate WSDL in project 那么IDE会在我们项目的WEB-INF下,创建一个wsdl文件夹,其中保存生成的wsdl文件和xsd文件.我们也可以不选。


点击Finish后,我们完成了对服务类的创建。
在完成了对服务类的创建后,我们可以看到在Products.java的源包下多了一个ProductsDelegate.java文件。
在WEB-INF文件夹中也多了一个sun-jaxws.xml,其代码为:
<?xml version = "1.0"?>
<endpoints version="2.0"
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
	<endpoint name="ProductsPort"
		implementation="cn.ls.webservice.ProductsDelegate"
		url-pattern="/ProductsPort">
	</endpoint>
</endpoints>

同时在web.xml文件中也自动添加了代码:
<servlet>
  	<description>JAX-WS endpoint - ProductsService</description>
  	<display-name>ProductsService</display-name>
  	<servlet-name>ProductsService</servlet-name>
  	<servlet-class>
  		com.sun.xml.ws.transport.http.servlet.WSServlet
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ProductsService</servlet-name>
  	<url-pattern>/ProductsPort</url-pattern>
  </servlet-mapping>
  <listener>
  	<listener-class>
  		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  	</listener-class>
  </listener>
每添加一个服务类,都需要在这两个文件中进行注册,当然myeclipse会自动帮助我们完成这项工作。

启动服务器,在服务器启动成功后,在地址栏中输入http://luosheng:8080/WebService/ProductsPort?wsdl就可以看到浏览器中显示:


这是表示我们的服务类启用成功了。

1.2创建客户端项目

由于我们只需要查看能否访问服务端程序获取信息,所以在这里我们只需要创建一个java项目即可。
在创建了一个java项目后,选中新创建的java项目,按照创建服务类的方式,创建客户端,不过在选择创建内容的时候选择web service client,如下图所示:

如下图所示,我们需要选择WSDl文件,这里有两种方式供我们选择一种是访问本地wsdl文件,一种是通过访问网络地址来获取wsdl文件,图中我们是以网络地址来获取wsdl文件,然后我们需要选择生成的客户端类文件的保存地址图中,我们保存在了cn.ls.client包中,如果我们没有创建包,那么可以通过new键来创建包。点击next创建客户端类。
完成创建后,我们可以在client包中看到刚刚生成的java类。
此时,我们可以通过编写一个main方法来验证我们能否成功的调用服务端的服务程序。main方法的代码为:
public class Main {
	/**
 	* @param args
 	*/
	public static void main(String[] args) {
		ProductsDelegate products = new ProductsService().getProductsPort();
		for(String str:products.getAllProduct()){
			System.out.println(str);
		}
	}
}



运行成功后我们可以看到在控制太成功的打印除了产品信息:

这样我们就成功的完成了一次简单的基于JAX-WS的web service编程


2.基于手动的编写JAX-WS的WebService

在第一节中,我们是通过myeclipse来编译和生成的webService代码文件,那么怎么来通过手动的方式来创建web服务呢!接下来我们就来看看。

2.1手动编译创建服务端类

2.1.1创建编译服务类

我们还是以刚刚的项目来进行讲解。在创建好Products.java类后,如果要通过手动的方式将其变为服务类,还需要对Products.java文件进行注解。
@WebService
public class Products {
	@WebMethod
	public List<String> getAllProduct(){
		List<String> product = new ArrayList<String>();
		product.add("java核心技术");
		product.add("javaEE开发速成");
		product.add("SOA面向方面架构");
		return product;
	}
}
在代码中,@WebService将Products类标注为web服务类,@WebMethod将方法getAllproduct标注为服务类。完成上述步骤后,我们就通过手动的方式来生成相应的wsdl等文件。打开系统的cmd界面。进入到项目目录下。
我们通过命令wsgen来生成相应的wsdl等文件。如下图所示:(在运行时需要现在项目下创建wsdl和wssrc两个 文件夹,否则会报错)


其中:

-wsdl参数代表生成webservice

- s参数代表生成的.java文件置于何处

-d 参数代表生成的编译class文件置于何处(这个可以忽略,我们利用eclipse编译)

-r 参数代表生成的.wsdl文件与.xsd文件生成在何处

-cp参数代表classpath,即Hello.class的所在,为什么我们的-cp后是这么长一个路径呢?请看Eclipse里工程编译输出目录的路径就知道了:

完成后,刷新项目,此时我们可以看到项目中的wsdl文件夹和wssrc文件夹下多出了一些文件。


我们将wssrc下的文件拷贝到src下。

2.1.2配置,部署服务类

由于我们是手动生成的服务类,所以我们还需要手动的去修改web.xml和在WEB-INF文件夹下添加sun-jaxws.xml文件,之前这些工作都是myeclipse帮我们做的。

修改web.xml添加如下代码:

<servlet>
  	<servlet-name>ProductsService</servlet-name>
  	<servlet-class>
  		com.sun.xml.ws.transport.http.servlet.WSServlet
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ProductsService</servlet-name>
  	<url-pattern>/ProductsPort</url-pattern>
  </servlet-mapping>
  <listener>
  	<listener-class>
  		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  	</listener-class>
  </listener>
创建sun-jaxws.xml文件

<?xml version = "1.0"?>
<endpoints version="2.0"
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
	<endpoint name="ProductsPort"
		implementation="cn.ls.webservice.Products"
		url-pattern="/ProductsPort">
	</endpoint>
</endpoints>
完成上述步骤后,运行项目,访问地址相应地址,如http://-luosheng:8080/WebService/ProductsPort?wsdl,能够在浏览器中正确的查看wsdl文件,即表示创建成功。

2.2通过服务端的wsdl和xsd文件生成客户端java类

将服务端生成的wsdl文件和xsd文件拷贝到客户端项目下,我们通过命令 wsimport来完成对客户端java的生成。
在cmd界面进入客户端项目文件夹。运行如下图所示命令:


刷新项目,即可看到生成的服务端java类。通过main方法运行生成的类:
/**
	 * @param args
	 */
	public static void main(String[] args) {
		Products products = new ProductsService().getProductsPort();
		for(String str:products.getAllProduct()){
			System.out.println(str);
		}
	}


此时运行main方法,程序会报错,为什么呢?我们打开ProductsService.java类,可以看到

@WebServiceClient(name = "ProductsService", targetNamespace = "http://webservice.ls.cn/", wsdlLocation = "file:/F:/workspace/WebClient/wsdl/ProductsService.wsdl")

 static {
        URL url = null;
        try {
            URL baseUrl;
            baseUrl = cn.ls.webservice.ProductsService.class.getResource(".");
            url = new URL(baseUrl, "file:/F:/workspace/WebClient/wsdl/ProductsService.wsdl");
        } catch (MalformedURLException e) {
            logger.warning("Failed to create URL for the wsdl Location: 'file:/F:/workspace/WebClient/wsdl/ProductsService.wsdl', retrying as a local file");
            logger.warning(e.getMessage());
        }
        PRODUCTSSERVICE_WSDL_LOCATION = url;
    }
通过这两段代码,我们看到在第一段的wsdlLocation和第二段的url中,均为file:/F:/workspace/WebClient/wsdl/ProductsService.wsdl,这是表示的程序运行时,程序获取wsdl文件的地址,在这里我们需要对她进行修改,修改为我们服务器端相应的wsdl地址,如: http://luosheng:8080/WebService/ProductsPort?wsdl,修改后我们再运行程序,即可以成功的看到正确的运行结果了!


更详细的手动创建webService方法,请参照博客:http://blog.csdn.net/lifetragedy/article/details/7205832










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值