<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Live in code &#187; jaxws-ri</title>
	<atom:link href="http://www.agatezone.cn/code/tag/jaxws-ri/feed" rel="self" type="application/rss+xml" />
	<link>http://www.agatezone.cn/code</link>
	<description>agate&#039;s tech blog</description>
	<lastBuildDate>Tue, 20 Jul 2010 05:35:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>在GlassFish的WebService中需要注意的HashMap</title>
		<link>http://www.agatezone.cn/code/archives/45</link>
		<comments>http://www.agatezone.cn/code/archives/45#comments</comments>
		<pubDate>Wed, 02 Apr 2008 09:45:54 +0000</pubDate>
		<dc:creator>agate</dc:creator>
				<category><![CDATA[程序编码]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jaxws-ri]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.agatezone.cn/code/?p=45</guid>
		<description><![CDATA[虽然如今的ws标准都已经很智能了，大多的数据类型都可以识别。但是在GlassFish中，发布的ws方法中参数和返回值不可以为hashmap的，但是如果非要要使用键值对该如何使用呢？
最简单的方法就是再次包装：

public class MapBean {
	private HashMap&#60;String,String&#62; hm;
	public HashMap&#60;String, String&#62; getHm() {
		return hm;
	}
	public void setHm(HashMap&#60;String, String&#62; hm) {
		this.hm = hm;
	}
}


@WebService()
public class HelloWorld {
	public HelloWorld() {
	}
	@WebMethod
	public MapBean getMapBean(HashMap&#60;String,String&#62; hm) {
		MapBean mb = new MapBean();
		hm.put(&#34;server&#34;, &#34;serverHashMap&#34;);
		mb.setHm(hm);
		System.out.println(&#34;Hello HashMap...&#34;);
		return mb;
	}
}

这样，加一层包装之后，就可以间接地使用Map了。
]]></description>
			<content:encoded><![CDATA[<p>虽然如今的ws标准都已经很智能了，大多的数据类型都可以识别。但是在GlassFish中，发布的ws方法中参数和返回值不可以为hashmap的，但是如果非要要使用键值对该如何使用呢？<br />
最简单的方法就是再次包装：</p>
<pre class="brush: java;">
public class MapBean {
	private HashMap&lt;String,String&gt; hm;
	public HashMap&lt;String, String&gt; getHm() {
		return hm;
	}
	public void setHm(HashMap&lt;String, String&gt; hm) {
		this.hm = hm;
	}
}
</pre>
<pre class="brush: java;">
@WebService()
public class HelloWorld {
	public HelloWorld() {
	}
	@WebMethod
	public MapBean getMapBean(HashMap&lt;String,String&gt; hm) {
		MapBean mb = new MapBean();
		hm.put(&quot;server&quot;, &quot;serverHashMap&quot;);
		mb.setHm(hm);
		System.out.println(&quot;Hello HashMap...&quot;);
		return mb;
	}
}
</pre>
<p>这样，加一层包装之后，就可以间接地使用Map了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agatezone.cn/code/archives/45/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过jaxws-ri于webservice来一次亲密接触</title>
		<link>http://www.agatezone.cn/code/archives/22</link>
		<comments>http://www.agatezone.cn/code/archives/22#comments</comments>
		<pubDate>Tue, 30 Oct 2007 13:40:27 +0000</pubDate>
		<dc:creator>agate</dc:creator>
				<category><![CDATA[程序编码]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jaxws-ri]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://www.agatezone.cn/?p=22</guid>
		<description><![CDATA[关于SOA、Web Service已经在我耳边晃悠了很久了，但是一直以来我都因为技术上的问题以及实际需求的问题没有关照过这两个似乎已被企业提高到一个很高的关注度的现代技术。
借助这回培训，老师介绍了一个叫做jaxws-ri(reference implemention)的webservice工具，即jax的web服务参考实现。这个工具不敢说好不好，我也说不出个所以然，毕竟第一次接触吧，但是它能让初识webservice的程序员两三下就搭出webservice的服务！
不说太多过程的话了！现在开始：
1. 获得开发包
当然是到 SUN 的开发网站下载 JAX-WS RI ，下载下来的只是一个jar包，参考官网上的方法在命令行调用：
java -jar JAXWS2.1.2-20070917.jar
//注：这里根据你下的版本不同jar包的名字也会不同
这时候会在调用这条命令的文件夹下生成一个文件夹，里头包括了bin、lib、doc等。其中bin中的有两个重要的生成工具！
2. 配置
在你的机器中配置好环境变量JAXWS_HOME以及在Path环境变量中加入%JAXWS_HOME%\bin
3. Start
部署基本完成了，开动我们的eclipse吧！创建一个java工程，导入jaxws下lib中的所有jar包到构建空间中。
4. 实现第一个服务类
让我们建一个包（名字随便啦！）我用server包，在里头建立一个HelloWorld.java类，代码如下：

public class HelloWorld {
	public String getHello(String name) {
		return &#34;Hello &#34; + name + &#34;!&#34;;
	}
}

十分简单的代码对吧，不过做一个helloworld这个完全够了！不过既然是webservice当然有点不同咯！需要根据jdk5+的特性加入一些@符号的注释。完整代码如下

@WebService
/*
* 如果出现找不到符号
* 在eclipse中按 ctrl+shift+o 导入对应包即可
*/
public class HelloWorld {
	public String getHello(String name) {
		return &#34;Hello &#34; + name + &#34;!&#34;;
	}
}

5. 接下来就是生成服务端所需使用的stub类了。
（庆幸这个完全由jaxws-ri工具包中的bin下的wsgen.bat批处理命令完成了）。我们现在需要的是在工程根目录下建立一个genServer.bat文件（当然也可以进到当前目录下的cmd中进行操作）。
键入下列命令：（dos中相同）
wsgen -cp bin server.HelloWorld -s src -d bin
请注意这里的
-cp 代表你项目的class编译文件存放的位置
(这里的server.HelloWorld就是那个服务类的类全名)
-s 代表你将把生成的stub类的源代码放置到的目录
-d 代表你将把生成的stub编译好的class放置到的目录
6. [...]]]></description>
			<content:encoded><![CDATA[<p>关于SOA、Web Service已经在我耳边晃悠了很久了，但是一直以来我都因为技术上的问题以及实际需求的问题没有关照过这两个似乎已被企业提高到一个很高的关注度的现代技术。</p>
<p>借助这回培训，老师介绍了一个叫做jaxws-ri(reference implemention)的webservice工具，即jax的web服务参考实现。这个工具不敢说好不好，我也说不出个所以然，毕竟第一次接触吧，但是它能让初识webservice的程序员两三下就搭出webservice的服务！</p>
<p>不说太多过程的话了！现在开始：</p>
<p>1. 获得开发包</p>
<p>当然是到 SUN 的开发网站下载 <a href="https://jax-ws.dev.java.net/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/jax-ws.dev.java.net/?referer=');">JAX-WS RI</a> ，下载下来的只是一个jar包，参考官网上的方法在命令行调用：<br />
<code>java -jar JAXWS2.1.2-20070917.jar<br />
//注：这里根据你下的版本不同jar包的名字也会不同</code></p>
<p>这时候会在调用这条命令的文件夹下生成一个文件夹，里头包括了bin、lib、doc等。其中bin中的有两个重要的生成工具！</p>
<p>2. 配置</p>
<p>在你的机器中配置好环境变量<strong>JAXWS_HOME</strong>以及在<strong>Path</strong>环境变量中加入<strong>%JAXWS_HOME%\bin</strong></p>
<p>3. Start</p>
<p>部署基本完成了，开动我们的eclipse吧！创建一个java工程，导入jaxws下lib中的所有jar包到构建空间中。</p>
<p>4. 实现第一个服务类</p>
<p>让我们建一个包（名字随便啦！）我用server包，在里头建立一个HelloWorld.java类，代码如下：</p>
<pre class="brush: java;">
public class HelloWorld {
	public String getHello(String name) {
		return &quot;Hello &quot; + name + &quot;!&quot;;
	}
}
</pre>
<p>十分简单的代码对吧，不过做一个helloworld这个完全够了！不过既然是webservice当然有点不同咯！需要根据jdk5+的特性加入一些@符号的注释。完整代码如下</p>
<pre class="brush: java;">
@WebService
/*
* 如果出现找不到符号
* 在eclipse中按 ctrl+shift+o 导入对应包即可
*/
public class HelloWorld {
	public String getHello(String name) {
		return &quot;Hello &quot; + name + &quot;!&quot;;
	}
}
</pre>
<p>5. 接下来就是生成服务端所需使用的stub类了。</p>
<p>（庆幸这个完全由jaxws-ri工具包中的bin下的wsgen.bat批处理命令完成了）。我们现在需要的是在工程根目录下建立一个genServer.bat文件（当然也可以进到当前目录下的cmd中进行操作）。<br />
<code>键入下列命令：（dos中相同）<br />
wsgen -cp bin server.HelloWorld -s src -d bin</code></p>
<blockquote><p>请注意这里的<br />
-cp 代表你项目的class编译文件存放的位置<br />
(这里的server.HelloWorld就是那个服务类的类全名)<br />
-s 代表你将把生成的stub类的源代码放置到的目录<br />
-d 代表你将把生成的stub编译好的class放置到的目录</p></blockquote>
<p>6. 发布服务</p>
<p>执行后刷新eclipse中的工程，你将发现多了一个包，以及包中的那些stub类。说明服务器端所需的准备已经完成了，你只需要的是把webservice启动起来（说白了是吧wsdl注册到URL上） 。</p>
<p>在server包中建立一个Main.java（只是为了启动罢了，名字随便）代码如下：</p>
<pre class="brush: java;">
public class Main {
	public static void main(String[] args) {
		Endpoint.publish(&quot;http://localhost:8001/HelloWorld&quot;, new HelloWorld());
	}
}
</pre>
<p>写好运行就ok了！不信？登录 <a href="http://localhost:8001/HelloWorld" onclick="pageTracker._trackPageview('/outgoing/localhost_8001/HelloWorld?referer=');">http://localhost:8001/HelloWorld</a><br />
就知道了！看看是不是出现了SOAP的xml节目了？</p>
<p>7. 客户端根据WSDL获取SOAP的服务描述</p>
<p>首先我们知道，一般来说，先要有服务才能调用对吧！但是有什么服务呢？我们需要问一下发布服务的网址，他会给出一个SOAP格式描述的服务来给我们参照实现自己的调用类。</p>
<p>你会说哇！我没学过这些我怎么知道怎么写客户端的stub类啊？（呵呵，我也没学过，我不是也写好了吗）其实啊！是jaxws-ri的另一个生成工具即：wsimport.bat这个命令让这些操作一步完成，自动生成了所以需要的客户端stub类。使用方式如下：</p>
<p><code>建立genClient.bat(同genws，你也可以在工程目录的cmd下执行)<br />
wsimport -s src -d bin -p client.jaxws http://localhost:8001/HelloWorld?wsdl</code></p>
<p>再刷新eclipse中的工程，是不是又有一个包出来了？那个就是你的本地包了，RPC全靠它啦！</p>
<p>8. 建立客户端的应用来实现RPC</p>
<p>这里是最后一步了！你将看到如何在客户端调用WebService中提供的方法！</p>
<p>还记得我们前面写的那个HelloWorld类吗？他有个getHello方法，能够让你传入一个字符串并返回一个字符串。这是服务端的方法，现在以下代码将实现客户端的调用！</p>
<pre class="brush: java;">
package client;

import client.jaxws.HelloWorld;
import client.jaxws.HelloWorldService;

public class Main {
	public static void main(String[] args) {
		HelloWorld hw = new HelloWorldService().getHelloWorldPort();
		System.out.println(hw.getHello(&quot;agate&quot;));
	}
}
</pre>
<p>在保证你server.Main正在运行的前提下执行这个client.Main你会发现你的控制栏中出现了"hello agate"的输出。</p>
<p>Done！本文只是初识jaxws-ri的经验，只供初学者快速上手！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agatezone.cn/code/archives/22/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
