﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-随笔分类-webservice</title><link>http://www.blogjava.net/caizh2009/category/40928.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Fri, 19 Nov 2010 21:10:29 GMT</lastBuildDate><pubDate>Fri, 19 Nov 2010 21:10:29 GMT</pubDate><ttl>60</ttl><item><title>java soap技术</title><link>http://www.blogjava.net/caizh2009/archive/2010/11/18/338358.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 18 Nov 2010 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/11/18/338358.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/338358.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/11/18/338358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/338358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/338358.html</trackback:ping><description><![CDATA[<div>http://www.cn-java.com/www1/?action-viewnews-itemid-3054</div>
...
set CATALINA_HOME=C:\Tomcat4.1.29
set CLASSPATH=%JAVA_HOME%\lib\tools.jar
set CLASSPATH=%JAVA_HOME%\soap-2.3.1\lib\soap.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\javamail-1.3.1\mail.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\jaf-1.0.2\activation.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesImpl.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xercesSamples.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xml-apis.jar
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\xerces-2_6_0\xmlParserAPIs.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\servlet.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\tools.jar
...
如果你的安装路径（installation
paths）和上面使用的不同，你需要更正它们，然后关闭和重启Tomcat以使它们生效。这样，你就有为运行SOAP作好了准备。但是现在，我要忘记有
关的技术部分，来学一点理论知识。
SOAP意思是简单对象访问协议（Simple Object Access
Protocol）。的确如它的名字一样，SOAP是很简单的。它是一个基于XML的协议，允许程序组件和应用程序彼此使用一种标准的Internet协
议--HTTP来通讯。SOAP是一种独立的平台，它不依赖程序语言，它是简单的，弹性的，很容易扩展的。目前，应用程序能够彼此使用一种基于DCOM和
CORBA技术的远程过程调用（RPC）来进行相互通讯，但HTTP不被设计为这个目的。RPC在Internet上应用是非常困难的，它们会出现许多兼
容性和安全性的问题，因为防火墙和代理服务器通常都会阻断（block）这些类型的流量。应用程序之间最好的通讯方式是通过HTTP协议，因为HTTP是
支持所有Internet浏览器和服务器的。基于这个目的，SOAP协议被创建出来。
那么，它们是如何运作的呢？比如，一个应用程序（A）需要和另一个应用程序（B）在SOAP的帮助下进行彼此通讯。它们将使用下面的框架图来完成这个
过程：
<img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://soft.yesky.com/image20010518/201676.gif" alt="" />
这个SOAP信封（SOAP envelope）是一个包含以下内容的XML文档：
<img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://soft.yesky.com/image20010518/201677.gif" alt="" />
正如你看到的，它是非常简单的。它看起来确实就象一个普通的信封或者你的email。你想看看它们是如何动作的吗？下面跟我们一起来吧。其实我们有很多方
法是不用SOAP来在创建和运行我们自己的&#8220;Hello
World&#8221;应用程序的，但是因为我们要保持它的简单性，我会给你一个它运作方式的框架图（scheme）。
我们的&#8220;Hello World&#8221;范例会包含一个SOAP Service。我们的SOAP Client将发送它们的名字到该SOAP
Service，并试图得到一些答复或响应。这个SOAP Service需要部署到一个SOAP
Admin的工具，以至重定位所有请求的SOAP（Proxy） RPC
Router能够知道它们应该使用哪种服务来运作。总而言之，这个是以下面的方式来运作的：
<img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://soft.yesky.com/image20010518/201680.gif" alt="" />
现在，我们来一步步的看看到底发生了什么。在Step 1里，HelloWorldClient将连接一个SOAP RPC
Router，请求我们的SOAP Service并将包含我们名字的一个字符串传递给它。该SOAP RPC
Router会检查是否它已经部署了这个SOAP Service。如果它被发现是被部署的，那么它将传递数据到这个SOAP
Service并调用特定的方法，这个是Step 2。然后SOAP Service方法会被执行，将返回某个字符串值（该值就是SOAP
Client的答复或者响应）（Step 3）。在Step4中，SOAP RPC Router将仅仅只是重定向这个数据到SOAP
Client。所有在Step1和Step4里传输的数据是通过SOAP
Envelope来完成的。正如你所看到的，算法是相当简单的，因此我们只准备关心实际的代码。
首先，我们要创建一个SOAP Service。下面是它的代码，请不要忘记将它放入HelloWorld/
目录中（必须被包含在你的CLASSPATH中）：
1: // SOAPService.java
2: package HelloWorld;
3: public class SOAPService {
4: public String sayHi(String x) {
5: return("Hello my friend, " + x + "! Glad to see you!");
6: }
7: }
添加任何注释也是很容易的。要编译它，只需要用下列命令：
javac SOAPService.java
第二步，一旦我们准备好了SOAP Service，我们需要用SOAP Service
Manager来部署它。这个可以通过很多方式来实现，但是为了能让初学SOAP的读者更容易理解SOAP，我提供了一个最容易的方式。我们假设你的
Web
Server（Tomcat或其他）已经正常运行，并且你已经正确安装了SOAP。那么当浏览器访问http://localhost:8080
/soap/，你会看见Apache SOAP的欢迎页面。点击Run the admin client ，然后
Deploy。你会得到一个屏幕显示，在那里你需要填入ID，Scope，Method，Provider Type和JAVA
Provider的信息到表单域中。你能忽略其他所有的表单域，除非你真的需要它们的信息。我们的&#8220;HelloWorld&#8221;例子不需要它们，所以，我们填
的下面的值：
ID: urn:HelloWorld_SOAPService
Scope: Application
Methods: sayHi
Provider Type: java
Java Provider - Provider Class: HelloWorld.SOAPService
Java Provider - Static? No
一些注释：ID是我们要从SOAP Client标识我们的SOAP Service的唯一名字。Method包含SOAP
Service提供的一系列方法。JAVA Provider-Provider Class是SOAP Service Java类的名字。
现在，点击Deploy
按钮，那么你的服务会被部署。再次强调，请注意正确设置CLASSPATH环境变量。然后，你的HelloWorld.SOAPService类能够被找
到，并且所有必需的jar包也能被找到。这是个几乎每个人都会犯的普通错误。现在，你能够点击 List ，将会看见你的服务已经被部署进来。恭喜！
最后，让我们来创建一个SOAP Client。代码看起来有点复杂，但是在现实中不会只有这么点长。
1: // HelloWorldClient.java
2: import java.io.*;
3: import java.net.*;
4: import java.util.*;
5: import org.apache.soap.*;
6: import org.apache.soap.rpc.*;
7: public class HelloWorldClient {
8: public static void main(String[] arg) throws Exception {
9: Call c = null;
10: URL url = null;
11: Vector params = null;
12: Response rep = null;
13: String ourName = "Superman";
14: String ourUrn = "urn:HelloWorld_SOAPService";
15: String ourMethod = "sayHi";
16: url = new URL("http://localhost:8080/soap/servlet/
rpcrouter");
17: System.out.println("Passing to our deployed "+ourUrn+"
our name ("+ourName+"): ");
18: c = new Call();
19: c.setTargetObjectURI(ourUrn);
20: c.setMethodName(ourMethod);
21: c.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
22: params = new Vector();
23: params.addElement(new Parameter("ourName", String.class,
ourName, null));
24: c.setParams(params);
25: System.out.print("and its answer is: ");
26: rep = c.invoke(url, "");
27: if (rep.generatedFault()) {
28: Fault fault = rep.getFault();
29: System.out.println("\nCall failed!");
30: System.out.println("Code = " + fault.getFaultCode());
31: System.out.println("String = " + fault.getFaultString());
32: } else {
33: Parameter result = rep.getReturnValue();
34: System.out.print(result.getValue());
35: System.out.println();
36: }
37: }
38:}
下面我要做一些解释。在第13行，我们设置了我们的名字，这个名字将会传递给SOAP
Service。在第14行，我们设置了我们将要调用的服务的ID（service ID），和第15行里设置的服务方法（service
method）。有了这个ID，服务能够被部署到SOAP服务管理器（SOAP Service
Manager）中。我们没有设置任何其他值，仅仅只用刚才那些基础值就可以正常运作了。你能从SOAP的官方文档上得到相关信息，该文档来自SOAP包
中，它们的解释超出了本文的范围。
用以下方式编译这个SOAP Client：
javac HelloWorldClient.java
为了圆满完成它，让我们检查一下针对我们的测试，是否所有事情都准备就绪。Tomcat正在运行，所有的环境变量都正确，SOAP
Service被编译和部署，SOAP Client被成功编译。OK，让我们运行它，你将看到这个屏幕：
<img style="cursor: pointer;" title="点击图片可在新窗口打开" src="http://soft.yesky.com/image20010518/201681.gif" alt="" />
正如你所看到的，我们的SOAP Client使用SOAP协议成功发送它的名字和接收了一个答复。正如前面所说的，SOAP Service发送和接收的是SOAP envelope。这个是SOAP envelope的源代码。
被发送到SOAP Service的SOAP Envelope
＜?xml version=1.0 encoding=UTF-8?＞
＜SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/
soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"＞
＜SOAP-ENV:Body＞
＜ns1:sayHi xmlns:ns1="urn:HelloWorld_SOAPService"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/
soap/encoding/"＞
＜ourName xsi:type="xsd:string"＞Superman＜/ourName＞
＜/ns1:sayHi＞
＜/SOAP-ENV:Body＞
＜/SOAP-ENV:Envelope＞:
从SOAP Service接收的SOAP Envelope
＜?xml version=1.0 encoding=UTF-8?＞
＜SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/
soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"＞
＜SOAP-ENV:Body＞
＜ns1:sayHiResponse xmlns:ns1="urn:HelloWorld_SOAPService"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.
org/soap/encoding/"＞
＜return xsi:type="xsd:string"＞Hello my friend, Superman!
Glad to see you!＜/return＞
＜/ns1:sayHiResponse＞
＜/SOAP-ENV:Body＞
＜/SOAP-ENV:Envelope＞
要理解SOAP Envelope中的所有标签的含义，我建议你花一点时间阅读 http://www.w3.org/2001/06/soap-envelope 命名空间规范。
我希望本文能够在你理解SOAP技术上有一定帮助。这个技术是简单的，有趣的，强大的，弹性的。它被用在许多Web
<img src ="http://www.blogjava.net/caizh2009/aggbug/338358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-11-18 10:22 <a href="http://www.blogjava.net/caizh2009/archive/2010/11/18/338358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webservice和soap原理</title><link>http://www.blogjava.net/caizh2009/archive/2010/11/15/338117.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Mon, 15 Nov 2010 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/11/15/338117.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/338117.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/11/15/338117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/338117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/338117.html</trackback:ping><description><![CDATA[<span  style="font-family: Verdana; font-size: 12px; ">做客户端有必要对soap做基本的了解，开发手机的程序员可能对web service不是太了解。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">soap简单说是基于xml的，建立在http协议上的协议，用来调用web server提供的service。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">这里转载一个对soap的简单原理，希望对大家有帮助</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">什么是Web Services</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　从表面上看，Web service 就是一个应用程序，它向外界暴露出一个能够通过Web进行调用的API。也就是说，可以利用编程的方法通过Web来调用这个应用程序。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。Web service平台是一套标准，它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言，在任何你喜欢的平台上写Web service ，只要我们可以通过Web service标准对这些服务进行查询和访问。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　不管你的Web service是用什么工具，什么语言写出来的，只要你用SOAP协议通过HTTP来调用它，总体结构都一致。通常，你用你自己喜欢的语言(如VB 6或者VB.NET)来构建你的Web service，然后用SOAP Toolkit或者.NET的内建支持来把它暴露给Web客户。于是，任何语言，任何平台上的客户都可以阅读其WSDL文档，以调用这个Web service。客户根据WSDL描述文档，会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的，客户生成的SOAP请求会被嵌入在一个HTTP POST请求中，发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于，解析收到的SOAP请求，调用Web service，然后再生成相应的SOAP应答。Web服务器得到SOAP应答后，会再通过HTTP应答的方式把它送回到客户端。</span>
<p class="author" style="background-color: #eeeeff; padding-top: 6px; padding-right: 6px; padding-bottom: 6px; padding-left: 6px; border-top-width: 1px; border-top-color: #ddddee; border-top-style: solid; font-family: Verdana; font-size: 12px; "><strong>iGoogle</strong>&nbsp;发表于 2010-10-24 17:00</p>
<span  style="font-family: Verdana; font-size: 12px; ">基本概念</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　SOAP</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　XML和XSD</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　WSDL(Web Services Description Language)</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　WSML(Web Services Meta Language)</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　什么时候使用Web Services</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　Web service是创建可互操作的分布式应用程序的新平台。Web service 的主要目标是跨平台的可互操作性。为了达到这一目标，Web service 是完全基于XML、XSD等独立于平台、独立于软件供应商的标准的。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　Web service在应用程序跨平台和跨网络进行通信的时候是非常有用的。Web service适用于应用程序集成、B2B集成、代码和数据重用，以及通过Web进行客户端和服务器的通信的场合。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　当然，Web service也不是万能的，你不能到处滥用Web service。在有些情况下，Web service 会降低应用程序的性能，而不会带来任何好处。例如，一台机器或一个局域网里面运行的同构应用程序就不应该用Web service 进行通信。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　如何调用Web Services</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　客户端:取得服务端的服务描述文件WSDL，解析该文件的内容，了解服务端的服务信息，以及调用方式。根据需要，生成恰当的SOAP请求消息(指定调用的方法，已经调用的参数)，发往服务端。等待服务端返回的SOAP回应消息，解析得到返回值。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　服务端:生成服务描述文件，以供客户端获取。接收客户端发来的SOAP请求消息，解析其中的方法调用和参数格式。根据WSDL和WSML的描述，调用相应的COM对象来完成指定功能，并把返回值放入SOAP回应消息返回给用户。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　高层接口</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　使用高层接口，不需要知道SOAP和XML的任何信息，就可以生成和使用一个WebService。Soap Toolkit 2.0通过提供两个COM对象――SoapClient和SoapServer，来完成这些功能。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　在客户端，只需要生成一个SoapClient实例，并用WSDL作为参数来调用其中的mssoapinit方法。SoapClient对象会自动解析 WSDL文件，并在内部生成所有Web Service的方法和参数信息。之后，你就可以像调用IDispatch接口里的方法一样，调用里面所有的方法。在VB或是脚本语言里，你甚至可以直接在SoapClient对象名后面直接加上.方法(参数&#8230;)进行调用。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　低层接口</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　要使用低层接口，你必须对SOAP和XML有所了解。你可以对SOAP的处理过程进行控制，特别是要做特殊处理的时候。</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　</span><span  style="font-family: Verdana; font-size: 12px; "><br />
</span><span  style="font-family: Verdana; font-size: 12px; ">　　在客户端，首先要创建一个HttpConnector对象，负责HTTP连接。设定Connector的一些头部信息，比如EndPoinURL和 SoapAction等。如果网络连接需要使用代理服务器，那也要在这里设定相关的信息。接着创建SoapSerializer对象，用于生成Soap消息。按照WSDL里定义，把所有参数按顺序序列化，得到一个完整的SOAP请求消息。该Soap消息，作为Payload通过HttpConnector 被发送到服务端。最后，生成一个</span>
<img src ="http://www.blogjava.net/caizh2009/aggbug/338117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-11-15 16:57 <a href="http://www.blogjava.net/caizh2009/archive/2010/11/15/338117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2 java.lang.reflect.InvocationTargetException </title><link>http://www.blogjava.net/caizh2009/archive/2010/10/11/334457.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Mon, 11 Oct 2010 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/10/11/334457.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/334457.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/10/11/334457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/334457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/334457.html</trackback:ping><description><![CDATA[<h1 class="title_txt">
<img src="http://blog.csdn.net/images/turnship.gif" alt="转载" border="0" height="15" width="15" />&nbsp;
axis2 java.lang.reflect.InvocationTargetException
<cite class="fav_csdnstylebykimi"><a class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友">收藏</a> </cite>
</h1>
<p><strong><a href="http://loshamo.javaeye.com/blog/627020">http://loshamo.javaeye.com/blog/627020</a></strong></p>
<div class="blog_content">[i][/i]在使用codegen1.3插件来从WSDL生成代码,到了最后一步竟然出然
了"An error occurred while completing process
-java.lang.reflect.InvocationTargetException"的错误 <br />
产生这种错误的原因一般有2种：首先关闭eclipse。 <br />
1.jar包缺失 <br />
从AXIS2的LIB库中复制"geronimo-stax-api_1.0_spec-1.0.1.jar"和"backport-util-concurrent-3.1.jar"文件到Codegen的lib目录中,同时修改plugin.xml文件,添加 <br />
<br />
&lt;library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar"&gt; <br />
&lt;export name="*"/&gt; <br />
&lt;/library&gt; <br />
&lt;library name="lib/backport-util-concurrent-3.1.jar"&gt; <br />
&lt;export name="*"/&gt; <br />
&lt;/library&gt; <br />
2.版本问题 <br />
F:\Program Files\MyEclipse 6.0\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml中 <br />
&lt;plugin <br />
&nbsp;&nbsp; id="Axis2_Codegen_Wizard" <br />
&nbsp;&nbsp; name="Axis2 Codegen Wizard Plug-in" <br />
&nbsp;&nbsp; version="1.3.0" <br />
&nbsp;&nbsp; provider-name="Apache Software Foundation" <br />
&nbsp;&nbsp;
class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin"&amp;
gt;看看自己下载的axis2版本是否和这个配置一致，像我的是axis2-1.5.1则需修改上面的配置为&lt;plugin <br />
&nbsp;&nbsp; id="Axis2_Codegen_Wizard" <br />
&nbsp;&nbsp; name="Axis2 Codegen Wizard Plug-in" <br />
&nbsp;&nbsp; version="1.5.1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对应的版本号 <br />
&nbsp;&nbsp; provider-name="Apache Software Foundation" <br />
&nbsp;&nbsp; class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin"&gt;</div>
然后再将文件夹的名字Axis2_Codegen_Wizard_1.3.0改为Axis2_Codegen_Wizard_1.5.1 <br />
修改完以上2步重新启动eclipse即可。
<img src ="http://www.blogjava.net/caizh2009/aggbug/334457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-10-11 17:29 <a href="http://www.blogjava.net/caizh2009/archive/2010/10/11/334457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Java编写简单的WebService实例</title><link>http://www.blogjava.net/caizh2009/archive/2010/10/09/334122.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Sat, 09 Oct 2010 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/10/09/334122.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/334122.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/10/09/334122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/334122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/334122.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用Axis编写WebService比较简单，就我的理解，WebService的实现代码和编写Java代码其实没有什么区别，主要是将哪些Java类发布为WebService。下面是一个从编写测试例子到发布WebService，以及编写测试代码的过程介绍。&nbsp; &nbsp;&nbsp;&nbsp;本例子的WebService提供了两个方法，分别是sayHello和sayHelloTo...&nbsp;&nbsp;<a href='http://www.blogjava.net/caizh2009/archive/2010/10/09/334122.html'>阅读全文</a><img src ="http://www.blogjava.net/caizh2009/aggbug/334122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-10-09 17:41 <a href="http://www.blogjava.net/caizh2009/archive/2010/10/09/334122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis 开发 webservice HELLO WORLD</title><link>http://www.blogjava.net/caizh2009/archive/2010/03/29/316846.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Mon, 29 Mar 2010 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/03/29/316846.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/316846.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/03/29/316846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/316846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/316846.html</trackback:ping><description><![CDATA[<strong><span class="hilite2">axis2</span>创建web service（一）</strong>
<p><strong>&nbsp;http://blog.csdn.net/chnic/archive/2008/03</strong></p>
<p><strong>/13/2179760.aspx</strong></p>
<p>http://www.javaeye.com/topic/284387<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>&nbsp;&nbsp;&nbsp;&nbsp;
</p>
<p><span class="hilite2">axis2</span> 是新一代的web service开发工具，它会让你的web
service开发变得轻松，快捷。下面让我们以一个实际的例子来体验一下。</p>
<p>首先，工欲善其事，必先利其器。就让我们先做好一些必备的准备工作吧。</p>
<p>&nbsp;</p>
<p>1.下载<span class="hilite2">axis2</span> 的2进制的包和war,现在的最新版本是1.4.1
发布时间是2008-8-25 </p>
<p>地址<a href="http://ws.apache.org/axis2"> http://ws.apache.org/axis2</a></p>
<p>具体的1.4.1版本的http://ws.apache.org/axis2/download/1_4_1/download.cgi<a href="http://ws.apache.org/axis2"><br />
</a></p>
<p>&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/1a.jpg" /><img alt="" src="http://www.javaeye.com/upload/attachment/55067/037b1dca-5361-3e0c-af18-372bff9419f4.jpg" /><img src="file:///C:/DOCUME%7E1/OWNER/LOCALS%7E1/Temp/moz-screenshot-7.png" alt="" /><img src="file:///C:/DOCUME%7E1/OWNER/LOCALS%7E1/Temp/moz-screenshot-4.png" alt="" /><img src="file:///C:/DOCUME%7E1/OWNER/LOCALS%7E1/Temp/moz-screenshot.png" alt="" /><img alt="" src="http://www.javaeye.com/upload/attachment/55067/037b1dca-5361-3e0c-af18-372bff9419f4.jpg" /></p>
<p>2.把下载后的war放入tomcat的webapps目录里，然后启动tomcat，这样war包就会自动解压为目录<span class="hilite2">axis2</span></p>
<p>在浏览器中输入<a href="http://localhost:8080/axis2/">http://localhost:8080/<span class="hilite2">axis2</span>/</a>&nbsp;，如果一切正常你会看到下面的画面</p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/2a.jpg" /><br />
<br />
<img src="http://www.javaeye.com/upload/attachment/55067/037b1dca-5361-3e0c-af18-372bff9419f4.jpg" alt="" /><br />
&nbsp;<br />
&nbsp;3，就开始准备一下<span class="hilite2">axis2</span>的eclispe的插件
了。<span class="hilite2">axis2</span>的eclispe插件分为2个，一个是帮助我们生成aar文件的，另一个是帮
我们用wsdl文件生成stub代码的。</p>
<p>下载地址是</p>
<p><a href="http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-service-archiver-wizard.zip">http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/<span class="hilite2">axis2</span>/tools/1_4_1/<span class="hilite2">axis2</span>-eclipse-service-archiver-wizard.zip</a></p>
<p>&nbsp;</p>
<p><a href="http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip">http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/<span class="hilite2">axis2</span>/tools/1_4_1/<span class="hilite2">axis2</span>-eclipse-codegen-wizard.zip</a></p>
<p>下载完2个压缩文件后，可以直接把解压后的文件拷贝到plugins目录中，也可以在links目录中写文件路径的方式来安装插件，安装完插件后，
打开eclipse，在package explorer 中点击右键---&gt;选择new----&gt;other</p>
<p>如果安装正确你会看到</p>
<p><br />
<img src="http://www.javaeye.com/upload/attachment/55065/3c283216-1185-3f9d-8e10-582c478b5019.jpg" alt="" /><br />
&nbsp;这样准备工作就都做好了。接下来就是正式开发了。</p>
<p>开发的过程，下回分解。。。。。</p>
<p>&nbsp;</p>
<p>工具都已经准备齐全了。我们来动手做一个小例子来小试牛刀！</p>
<p>这一节我们先利用axis2来发布一个web service 的服务，然后在下一节我们做一客户端来调用这个服务。</p>
<p>我们的服务很简单的，就是输入一个字符串，然后打印出一段字符串。</p>
<p>代码很简单，主要是测试用。</p>
<div>
<div>
<div>Java代码 <embed src="http://deltaj.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=package%20com.deltaj.server%3B%0A%0Apublic%20class%20SimpleServer%20%7B%0A%0A%09%2F**%0A%09%20*%20%E7%AE%80%E5%8D%95%E7%9A%84%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95%0A%09%20*%20%0A%09%20*%2F%0A%09public%20String%20simpleMethod(String%20name)%20%7B%0A%09%09return%20name%20%2B%20%22Say%20this%20is%20a%20Simple%20method%20%5E-%5E%22%3B%0A%09%7D%0A%0A%7D%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>package&nbsp;com.deltaj.server;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;SimpleServer&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;</li>
    <li><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;简
    单的测试方法</span>&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;simpleMethod(String&nbsp;name)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name&nbsp;+&nbsp;"Say&nbsp;this&nbsp;is&nbsp;a&nbsp;Simple&nbsp;method&nbsp;^-^";&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">package com.deltaj.server;
public class SimpleServer {
/**
* 简单的测试方法
*
*/
public String simpleMethod(String name) {
return name + "Say this is a Simple method ^-^";
}
}
</pre>
<p>主要的过程就是如何利用axis2的eclispe插件来发布这个服务啦。</p>
<p>1。在eclispe 的package Explorer
中点击右键，在菜单中选择新建---&gt;other...-----&gt;Axis2 Service Archiver</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/1q.jpg" height="417" width="515" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55872/b54ed5f9-2ce8-3c4f-ba3f-52344546bded.jpg" alt="" /></p>
<p>2.然后点击next进入了类选择页面，在这个页面中的Class&nbsp;File Location选择框中选择类所在的文件夹。&nbsp;<br />
<img src="http://deltaj.javaeye.com/upload/attachment/55874/a56ec7ad-88e6-3cf8-8c9f-42c15ca2e74a.jpg" alt="" /></p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/2q.jpg" height="497" width="602" /><br />
&nbsp;3.点击next之后进入了选择 wsdl文件，这里我们选择skip wsdl。</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/3q.jpg" height="497" width="602" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55887/620647d0-c388-3ba1-9551-d84d67776b8f.jpg" alt="" /></p>
<p>4. 点击next之后，进入的是选择jar文件的页面，这里我们没有外部的jar，所以点击next直接跳过这个页面。</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/4q.jpg" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55880/6885b10f-8f52-3e30-b81e-b873367b281a.jpg" alt="" /></p>
<p><br />
&nbsp;4.点击next之后，进入的是选择xml页面，这里我们选择的是自动生成xml，也就是勾选</p>
<p>Generate the service xml automatically这一项</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/4q1.jpg" height="499" width="598" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55884/b5c4f691-2adc-3852-89b3-c577f48fff96.jpg" alt="" /></p>
<p><br />
&nbsp;5.点击next之后，进入的是生成xml文件的页面，在service name
里填写这个服务所起的名字，这里我起名为simpleServer,然后在class name
中填写要发布的类，这里一定要写全路径，写好后就可以点击load 按钮，如果一切ok的话，你会看到如下画面</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/5q.jpg" /><br />
</p>
<p><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55894/7d2a98bb-4329-3958-9f3a-040b5e565f9a.jpg" alt="" /></p>
<p><br />
&nbsp;6 点击next 后，进入的是输出artiver文件的页面，先要在output File&nbsp;location 中选择要输出的路径，</p>
<p>&nbsp;&nbsp; 在output&nbsp; File Name中输入artiver文件的名称。我起的名字是simpleServer</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/6q1.jpg" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55898/585ac20d-29bb-3ac6-83af-7aa3515f548f.jpg" alt="" /></p>
<p><br />
&nbsp;7.点击finish ，如果看到如下的画面，恭喜你，服务发布成功啦</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/7q.jpg" height="132" width="518" /><img src="http://deltaj.javaeye.com/upload/attachment/55910/cfbcdac8-3d5d-35b1-a438-9ebdd32e8c15.jpg" alt="" /></p>
<p>8.接下来，我们就可以把这个aar文件放入tomcat中发布，首先把生成的aar文件拷贝到tomcat目录中的axis2项目的
service目录中位置如图。</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/8q.jpg" height="314" width="244" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55912/8c710f5c-11ec-3b13-b878-5be6fb0a6138.jpg" alt="" /></p>
<p><br />
&nbsp;</p>
<p>9.接下来启动tomcat，在地址栏中输入<a href="http://localhost:8080/axis2">http://localhost:8080/axis2</a>&nbsp;,
你会看到axis2的欢迎画面</p>
<p><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55916/134ae492-6626-3522-839d-0246f1aad2e5.jpg" alt="" /><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/9q.jpg" /><br />
&nbsp;</p>
<p>10.点击Service连接，你会看到发布的服务列表。这里面就能看到我们发布的simpleService</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/10q.jpg" height="392" width="501" /><br />
<img src="http://deltaj.javaeye.com/upload/attachment/55920/7cdacb38-1815-32eb-9723-c3b9fd0c3443.jpg" alt="" /></p>
<p><br />
&nbsp;11.点击我们的服务simpleServer的连接，我们会看到。至此，服务发布成功。<br />
<img src="http://deltaj.javaeye.com/upload/attachment/55922/f1132cbb-3bb8-3831-a095-3e1e3cd5a98a.jpg" alt="" /><br />
&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/11q.jpg" height="417" width="515" /><br />
&nbsp;
<br />
</p>
<img alt="" src="http://deltaj.javaeye.com/upload/attachment/56366/fffcbf1d-89ee-3272-9e3e-a520bfefb0ec.jpg" />&nbsp;&nbsp; 这节我们就来写一个客户端来调用一下这个服务。主要关注一下如何用elispe的axis2的插件来生成stub代码。
<p>1.在eclispe 的package Explorer
中点击右键，在菜单中选择新建---&gt;other...-----&gt;Axis2 Code Generator</p>
<p><br />
<br />
<img src="http://deltaj.javaeye.com/upload/attachment/56345/0533bc95-52fa-3ec1-9e5d-a65cd8e80464.jpg" alt="" /><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/1w.jpg" height="494" width="517" /><br />
&nbsp;</p>
<p>2.点击next，进入下一个页面，选择从wsdl文件来产生java文件。<br />
</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/2w.jpg" height="658" width="721" /><br />
&nbsp;</p>
<p>3. 点击next，然后选择wsdl文件，注意此处要填写上一节我们<br />
</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/3w.jpg" height="663" width="726" /><br />
</p>
<p>&nbsp;4.点击next，进入设置页面，这里我们就用默认的设置。<br />
</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/4w.jpg" height="665" width="724" /><br />
&nbsp;</p>
<p>5.&nbsp;点击next，选择输出文件的路径。<br />
</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/5w.jpg" height="669" width="726" /><br />
&nbsp;
(出错解决方案：</p>
<div>除了把backport-util-
concurrent-2.2.jar加到lib中, 加&lt;library
name="lib/backport-util-concurrent-2.2.jar"&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;export name="*"/&gt;
<br />
&nbsp;&nbsp;&nbsp; &lt;/library&gt;&nbsp; 到plugsin.xml
<br />
还要
<br />
1.
把Axis2_Codegen_wizard_1.3.0(eclipse/plugins/Axis2_Codegen_wizard_1.3.0)的
名字改成Axis2_Codegen_wizard_1.4.0
<br />
2. 在plugin.xml中在&lt;plugin&gt;中
把Axis2_Codegen_wizard的version="1.3.0"改成version="1.3.0"</div>
<div id="bc1016923">
<div>
5 楼
<a href="http://eason-j.javaeye.com/" target="_blank">eason.j</a>
2009-05-19&nbsp;&nbsp;
<a href="http://deltaj.javaeye.com/blog/287067#" onclick="quote_comment(1016923);return false;">引用</a>
</div>
<div>在MyEclipse6.5中会报错：
<br />
An error ocurred while completing process
<br />
-java.lang.reflect.InvocationTargetException
<br />
<br />
主要的问题在于 Code Generator plugin 内缺少了 backport-util-concurrent-3.1.jar
包和geronimo-stax-api_1.0_spec-1.0.1.jar 包。
<br />
[解决方案] ：
<br />
<br />
1.关闭 Eclipse
<br />
<br />
2.copy&nbsp; %AXIS2_HOME%"lib" 下的
<br />
backport-util-concurrent-3.1.jar 和 backport-util-concurrent-3.1.jar
<br />
复制到 MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"lib
文件夹下。
<br />
<br />
3.注册此 jar 包:
<br />
修改MyEclipse
6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"plugin.xml 文件
<br />
在 &lt;runtime&gt; 內加入下面的字串
<br />
&nbsp;&nbsp;&nbsp; &lt;library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar"&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 	&lt;export name="*"/&gt;
<br />
&nbsp;&nbsp; &lt;/library&gt;
<br />
&nbsp;&nbsp;&nbsp; &lt;library name="lib/backport-util-concurrent-3.1.jar"&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 	&nbsp; &lt;export name="*"/&gt;
<br />
&nbsp;&nbsp;&nbsp; &lt;/library&gt;
<br />
<br />
到plugin.xml文件中,保存后重新启动Eclipse即可。</div>
</div>
<p>)</p>
<p>6.点击next，如果看到这个页面，恭喜你已经生成代码成功。<br />
<img src="http://deltaj.javaeye.com/upload/attachment/56366/fffcbf1d-89ee-3272-9e3e-a520bfefb0ec.jpg" alt="" /><br />
&nbsp;<br />
</p>
<p>7.在package
Explorer中刷新一下项目，然后你发现出现2个新的文件SimpleServerStub和
SimpleServerCallbackHandler 。打开SimpleServerStub你会惊喜的发现。著名的小红叉一个接一个的</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/caizh2009/6w.jpg" height="287" width="535" /></p>
<p>这是因为没有axis2的类包。我们可以在下载的axis2-1.4.1-bin中找到lib包，把其中的jar都加入我们的工程中。</p>
<p>然后重新编译一下工程，这时我们发现SimpleServerStub还是有几个小红叉。这个是因为这个插件有个小bug。</p>
<p>生成的代码没有实现序列化方法。我们可以自己来加上，在小红叉上点一下，弹出一个小菜单，选择</p>
<p>Add unimplemented methods .</p>
<p><br />
<img src="http://deltaj.javaeye.com/upload/attachment/56387/6eb814ae-c316-3c8c-9b4b-8941e87f3c2e.jpg" alt="" /><br />
&nbsp;</p>
<p>8.</p>
<div>
<div>
<div>Java代码 <embed src="http://deltaj.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%2F**%0A%26nbsp%3B*%20%E8%B0%83%E7%94%A8%E5%8F%91%E5%B8%83%E7%9A%84%E6%9C%8D%E5%8A%A1%E3%80%82%0A%26nbsp%3B*%20%0A%26nbsp%3B*%2F%0Apublic%20class%20SimpleClient%20%7B%0A%26nbsp%3B%0A%26nbsp%3Bpublic%20static%20void%20main(String%5B%5D%20args)%20throws%20Exception%7B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96%E6%A1%A9%E6%96%87%E4%BB%B6%0A%26nbsp%3B%26nbsp%3BSimpleServerStub%20stub%20%3D%20new%20SimpleServerStub()%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E5%88%9D%E5%A7%8B%E5%8C%96SimpleMethod%E6%96%B9%E6%B3%95%E3%80%82%0A%26nbsp%3B%26nbsp%3BSimpleServerStub.SimpleMethod%20request%20%3D%20new%26nbsp%3B%20SimpleServerStub.SimpleMethod()%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%E8%B0%83%E7%94%A8simpleMethod%E7%9A%84setName%E6%96%B9%E6%B3%95%E3%80%82%0A%26nbsp%3B%26nbsp%3Brequest.setName(%22zt%22)%3B%0A%26nbsp%3B%26nbsp%3B%2F%2F%0A%26nbsp%3B%26nbsp%3BSystem.out.println(stub.simpleMethod(request).get_return())%3B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%26nbsp%3B%0A%26nbsp%3B%7D%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>/**&nbsp;</li>
    <li><span><span>&nbsp;*&nbsp;调
    用发布的服务。</span>&nbsp;</span></li>
    <li>&nbsp;*&nbsp;&nbsp;</li>
    <li>&nbsp;*/&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;SimpleClient&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;//初始化桩文件&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;SimpleServerStub&nbsp;stub&nbsp;=&nbsp;new&nbsp;SimpleServerStub();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;//初始化SimpleMethod方法。&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;SimpleServerStub.SimpleMethod&nbsp;request&nbsp;=&nbsp;new&nbsp;&nbsp;SimpleServerStub.SimpleMethod();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;//调用simpleMethod的setName方法。&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;request.setName("zt");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;//&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;System.out.println(stub.simpleMethod(request).get_return());&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">/**
&nbsp;* 调用发布的服务。
&nbsp;*
&nbsp;*/
public class SimpleClient {
&nbsp;
&nbsp;public static void main(String[] args) throws Exception{
&nbsp;&nbsp;
&nbsp;&nbsp;//初始化桩文件
&nbsp;&nbsp;SimpleServerStub stub = new SimpleServerStub();
&nbsp;&nbsp;//初始化SimpleMethod方法。
&nbsp;&nbsp;SimpleServerStub.SimpleMethod request = new&nbsp; SimpleServerStub.SimpleMethod();
&nbsp;&nbsp;//调用simpleMethod的setName方法。
&nbsp;&nbsp;request.setName("zt");
&nbsp;&nbsp;//
&nbsp;&nbsp;System.out.println(stub.simpleMethod(request).get_return());
&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;}
}</pre>
<p>&nbsp;&nbsp; 如果一切正常，你就会看到结果</p>
<p>log4j:WARN No appenders could be found for logger
(org.apache.axis2.description.AxisService).<br />
log4j:WARN Please
initialize the log4j system properly.<br />
ztSay this is a Simple method
^-^。</p>
<p>调用服务成功。这是个简单的例子，下节我们再做一个复杂一点的例子，来更好的学习axis2</p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/316846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-03-29 16:35 <a href="http://www.blogjava.net/caizh2009/archive/2010/03/29/316846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA:使用Axis开发Web Service程序</title><link>http://www.blogjava.net/caizh2009/archive/2009/07/19/287374.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Sun, 19 Jul 2009 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/07/19/287374.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/287374.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/07/19/287374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/287374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/287374.html</trackback:ping><description><![CDATA[<p>说道Web Service的程序开发，八个月前我加班调试公司和中国电信的商务领航系统的接口的时候，用的就是Web Service，Web Service有很多优点，使用Web Service可以在不同编程语言间实现数据交换，而我那时对Web Service也不熟，就由同事帮我生成了一大堆Web Service的框架代码，我则只单独开发业务代码。 </p>
<p>　　这次的另外一个项目也要用Web Service了，不过人手也少了，没有人帮做Web Service了，只好自己动手。</p>
<p>　　好在开发前，有个同事先给我们不熟悉Web Service的程序员进行了一些培训，我才知道原来以前的Web Service都是可以自动生成代码的，而且也不难，试了一个下午客户端和服务器端的Web Service代码就都调试通过了，真不错。</p>
<p>　　为了更多喜爱开发的程序员也能迅速了解Web Service的开发，我这里整理了一些通过Axis开发Web Service的一些要点，希望能让不熟悉Web Service的开发人员能够迅速掌握Web Service。</p>
<p>　　一、Axis环境的安装</p>
<p>　　1、安装环境 J2SE SDK 1.4，Tomcat 5.0，eclipse 3.2。</p>
<p>　　2、到 http://xml.apache.org 网站下载Axis安装包。</p>
<p>　　3、将Axis相关包文件放在WEB-INF\lib目录下。</p>
<p>　　4、Axis可选的包：activation.jar； mail.jar； xmlsec-1.4.Beta1.jar拷贝到WEB-INF目录下，生成客户端时候需要使用。</p>
<p>　　Axis支持三种web service的部署和开发，分别为：</p>
<p>　　1、Dynamic Invocation Interface （DII）</p>
<p>　　2、Dynamic Proxy方式</p>
<p>　　3、Stubs方式</p>
<p>　　前两种方式我就不介绍了，同事告诉我他们自己都不使用前两种方式，他们建议我们使用Stubs方式，因此我就主要就介绍一下第三种方式。注意，我自己的Java源代码是放在D：\workspace\test\目录下，Axis相关包文件放在D：\workspace\test\WEB-INF目录下。</p>
<p>　　二、编写wsdd发布web服务，编写stub client访问web服务</p>
<p>　　1、编写服务端程序server，SayHello.java，编译server.SayHello.java</p>
<p>package server;<br />
public class SayHello<br />
{<br />
&nbsp;&nbsp;&nbsp; public String getName(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "hello "+name;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>　　2、编写wsdd文件</p>
<p>　　3、发布服务：</p>
<p>　　编辑一个deploy.bat，Axis_Lib为axis.jar路径。内容如下：</p>
<p>set Axis_Lib=D:\workspace\test\WEB-INF\lib<br />
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%<br />
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet<br />
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd</p>
<p>　　执行这个批处理文件，这时候，如果提示成功的话，访问http://localhost:8080/test/services 就会显示服务列表。</p>
<p>　　4、生成客户端client stub文件</p>
<p>　　在浏览器上访问服务器端的服务，可以下载到WSDL文件，通过Axis的相关工具，可以自动从WSDL文件中生成Web Service的客户端代码。</p>
<p>　　编写一个WSDL2Java.bat文件，其内容如下：</p>
<p>set Axis_Lib=D:\workspace\test\WEB-INF\lib<br />
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%<br />
set Output_Path=D:\workspace\test\src<br />
set Package=server.SayHello<br />
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl</p>
<p>　　执行这个批处理文件就可以生成client stub.</p>
<p>　　生成的stub client文件列表为：SayHello.java，SayHelloService.java，SayHelloServiceLocator.java，SayHelloSoapBindingStub.java .</p>
<p>　　5、编写客户端程序，编译并执行</p>
<p>　　下面是一段junit测试客户端代码。</p>
<p>import java.net.URL;<br />
import junit.framework.Test;<br />
import junit.framework.TestCase;<br />
import junit.framework.TestSuite;</p>
<p>public class TestWSClient extends TestCase {</p>
<p>&nbsp;&nbsp;&nbsp; public TestWSClient(String string) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(string);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void SayHelloClient() throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SayHelloService service = new SayHelloServiceLocator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SayHello_PortType client = service.getSayHello() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String retValue = client.getName("clientname");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(retValue);</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static Test suite() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTest(new TestWSClient("SayHelloClient"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>　　至此，整个服务器端和客户端的Web Service框架代码就完成了，剩下的就是在里面加入你的业务代码了，怎么样，Web Service并不难开发吧。</p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/287374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-07-19 23:05 <a href="http://www.blogjava.net/caizh2009/archive/2009/07/19/287374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>