??xml version="1.0" encoding="utf-8" standalone="yes"?>撸视在线观看免费视频,九九精品视频在线看,日韩精品久久久http://www.aygfsteel.com/caizh2009/category/40928.html与大家共同成?/description>zh-cnFri, 19 Nov 2010 21:10:29 GMTFri, 19 Nov 2010 21:10:29 GMT60java soap技?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/caizh2009/archive/2010/11/18/338358.html</guid><wfw:comment>http://www.aygfsteel.com/caizh2009/comments/338358.html</wfw:comment><comments>http://www.aygfsteel.com/caizh2009/archive/2010/11/18/338358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/caizh2009/comments/commentRss/338358.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/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 ... 如果你的安装路径Qinstallation pathsQ和上面使用的不同,你需要更正它们,然后关闭和重启Tomcat以它们生效。这P你就有ؓq行SOAP作好了准备。但是现在,我要忘记? 关的技术部分,来学一点理论知识? SOAP意思是单对象访问协议(Simple Object Access ProtocolQ。的如它的名字一PSOAP是很单的。它是一个基于XML的协议,允许E序lg和应用程序彼此用一U标准的Internet? ?-HTTP来通讯。SOAP是一U独立的q_Q它不依赖程序语aQ它是简单的Q弹性的Q很Ҏ扩展的。目前,应用E序能够彼此使用一U基于DCOM? CORBA技术的q程q程调用QRPCQ来q行怺通讯Q但HTTP不被设计个目的。RPC在Internet上应用是非常困难的,它们会出现许多兼 Ҏ和安全性的问题Q因为防火墙和代理服务器通常都会LQblockQ这些类型的量。应用程序之间最好的通讯方式是通过HTTP协议Q因为HTTP? 支持所有Internet览器和服务器的。基于这个目的,SOAP协议被创建出来? 那么Q它们是如何q作的呢Q比如,一个应用程序(AQ需要和另一个应用程序(BQ在SOAP的帮助下q行彼此通讯。它们将使用下面的框架图来完成这? q程Q? <img style="cursor: pointer;" title="点击囄可在新窗口打开" src="http://soft.yesky.com/image20010518/201676.gif" alt="" /> q个SOAP信封QSOAP envelopeQ是一个包含以下内容的XML文档Q? <img style="cursor: pointer;" title="点击囄可在新窗口打开" src="http://soft.yesky.com/image20010518/201677.gif" alt="" /> 正如你看到的Q它是非常简单的。它看v来确实就象一个普通的信封或者你的email。你想看看它们是如何动作的吗Q下面跟我们一h吧。其实我们有很多? 法是不用SOAP来在创徏和运行我们自q“Hello World”应用E序的,但是因ؓ我们要保持它的简单性,我会l你一个它q作方式的框架图QschemeQ? 我们?#8220;Hello World”范例会包含一个SOAP Service。我们的SOAP Client发送它们的名字到该SOAP ServiceQƈ试图得到一些答复或响应。这个SOAP Service需要部|到一个SOAP Admin的工P以至重定位所有请求的SOAPQProxyQ?RPC Router能够知道它们应该使用哪种服务来运作。总而言之,q个是以下面的方式来q作的: <img style="cursor: pointer;" title="点击囄可在新窗口打开" src="http://soft.yesky.com/image20010518/201680.gif" alt="" /> 现在Q我们来一步步的看看到底发生了什么。在Step 1里,HelloWorldClient连接一个SOAP RPC RouterQ请求我们的SOAP Serviceq将包含我们名字的一个字W串传递给它。该SOAP RPC Router会检查是否它已经部v了这个SOAP Service。如果它被发现是被部|的Q那么它传递数据到q个SOAP Serviceq调用特定的ҎQ这个是Step 2。然后SOAP ServiceҎ会被执行Q将q回某个字符串|该值就是SOAP Client的答复或者响应)QStep 3Q。在Step4中,SOAP RPC Router仅仅只是重定向q个数据到SOAP Client。所有在Step1和Step4里传输的数据是通过SOAP Envelope来完成的。正如你所看到的,法是相当简单的Q因此我们只准备兛_实际的代码? 首先Q我们要创徏一个SOAP Service。下面是它的代码Q请不要忘记它攑օHelloWorld/ 目录中(必须被包含在你的CLASSPATH中)Q? 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: } dM注释也是很容易的。要~译它,只需要用下列命oQ? javac SOAPService.java W二步,一旦我们准备好了SOAP ServiceQ我们需要用SOAP Service Manager来部|它。这个可以通过很多方式来实玎ͼ但是Z能让初学SOAP的读者更Ҏ理解SOAPQ我提供了一个最Ҏ的方式。我们假设你? Web ServerQTomcat或其他)已经正常q行Qƈ且你已经正确安装了SOAP。那么当览器访问http://localhost:8080 /soap/Q你会看见Apache SOAP的欢q页面。点击Run the admin client Q然? Deploy。你会得C个屏q显C,在那里你需要填入IDQScopeQMethodQProvider Type和JAVA Provider的信息到表单域中。你能忽略其他所有的表单域,除非你真的需要它们的信息。我们的“HelloWorld”例子不需要它们,所以,我们? 的下面的| 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提供的一pdҎ。JAVA Provider-Provider Class是SOAP Service Javacȝ名字? 现在Q点击Deploy 按钮Q那么你的服务会被部|Ӏ再ơ强调,h意正设|CLASSPATH环境变量。然后,你的HelloWorld.SOAPServicec能够被? 刎ͼq且所有必需的jar包也能被扑ֈ。这是个几乎每个人都会犯的普通错误。现在,你能够点?List Q将会看见你的服务已l被部vq来。恭喜! 最后,让我们来创徏一个SOAP Client。代码看h有点复杂Q但是在现实中不会只有这么点ѝ? 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:} 下面我要做一些解释。在W?3行,我们讄了我们的名字Q这个名字将会传递给SOAP Service。在W?4行,我们讄了我们将要调用的服务的IDQservice IDQ,和第15行里讄的服务方法(service methodQ。有了这个IDQ服务能够被部v到SOAP服务理器(SOAP Service ManagerQ中。我们没有设|Q何其他|仅仅只用刚才那些基础值就可以正常q作了。你能从SOAP的官Ҏ上得到相关信息Q该文档来自SOAP? 中,它们的解释超Z本文的范围? 用以下方式编译这个SOAP ClientQ? javac HelloWorldClient.java Z圆满完成它,让我们检查一下针Ҏ们的试Q是否所有事情都准备qA。Tomcat正在q行Q所有的环境变量都正,SOAP Service被编译和部vQSOAP Client被成功编译。OKQ让我们q行它,你将看到q个屏幕Q? <img style="cursor: pointer;" title="点击囄可在新窗口打开" src="http://soft.yesky.com/image20010518/201681.gif" alt="" /> 正如你所看到的,我们的SOAP Client使用SOAP协议成功发送它的名字和接收了一个答复。正如前面所说的QSOAP Service发送和接收的是SOAP envelope。这个是SOAP envelope的源代码? 被发送到SOAP Service的SOAP Envelope Q?xml version=1.0 encoding=UTF-8?Q? QSOAP-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"Q? QSOAP-ENV:BodyQ? Qns1:sayHi xmlns:ns1="urn:HelloWorld_SOAPService" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/ soap/encoding/"Q? QourName xsi:type="xsd:string"QSupermanQ?ourNameQ? Q?ns1:sayHiQ? Q?SOAP-ENV:BodyQ? Q?SOAP-ENV:EnvelopeQ? 从SOAP Service接收的SOAP Envelope Q?xml version=1.0 encoding=UTF-8?Q? QSOAP-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"Q? QSOAP-ENV:BodyQ? Qns1:sayHiResponse xmlns:ns1="urn:HelloWorld_SOAPService" SOAP-ENV:encodingStyle="http://schemas.xmlsoap. org/soap/encoding/"Q? Qreturn xsi:type="xsd:string"QHello my friend, Superman! Glad to see you!Q?returnQ? Q?ns1:sayHiResponseQ? Q?SOAP-ENV:BodyQ? Q?SOAP-ENV:EnvelopeQ? 要理解SOAP Envelope中的所有标{含义Q我你花一Ҏ间阅?http://www.w3.org/2001/06/soap-envelope 命名I间规范? 我希望本文能够在你理解SOAP技术上有一定帮助。这个技术是单的Q有的Q强大的Q弹性的。它被用在许多Web <img src ="http://www.aygfsteel.com/caizh2009/aggbug/338358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/caizh2009/" target="_blank">菜毛毛</a> 2010-11-18 10:22 <a href="http://www.aygfsteel.com/caizh2009/archive/2010/11/18/338358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webservice和soap原理http://www.aygfsteel.com/caizh2009/archive/2010/11/15/338117.html菜毛毛菜毛毛Mon, 15 Nov 2010 08:57:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338117.htmlhttp://www.aygfsteel.com/caizh2009/comments/338117.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/11/15/338117.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/338117.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/338117.html做客L有必要对soap做基本的了解Q开发手机的E序员可能对web service不是太了解?/span>
soap单说是基于xml的,建立在http协议上的协议Q用来调用web server提供的service?/span>
q里转蝲一个对soap的简单原理,希望对大家有帮助

什么是Web Services
  
  从表面上看,Web service 是一个应用程序,它向外界暴露Z个能够通过Webq行调用的API。也是_可以利用~程的方法通过Web来调用这个应用程序?/span>
  
  对Web service 更精的解释: Web services是徏立可互操作的分布式应用程序的新^台。Web serviceq_是一套标准,它定义了应用E序如何在Web上实C操作性。你可以用Q何你喜欢的语aQ在M你喜Ƣ的q_上写Web service Q只要我们可以通过Web service标准对这些服务进行查询和讉K?/span>
  
  不管你的Web service是用什么工P什么语a写出来的Q只要你用SOAP协议通过HTTP来调用它QMl构都一致。通常Q你用你自己喜欢的语a(如VB 6或者VB.NET)来构Z的Web serviceQ然后用SOAP Toolkit或?NET的内建支持来把它暴露lWeb客户。于是,M语言QQ何^C的客户都可以阅读其WSDL文档Q以调用q个Web service。客h据WSDL描述文Q会生成一个SOAPh消息。Web service都是攑֜Web服务?(如IIS) 后面的,客户生成的SOAPh会被嵌入在一个HTTP POSTh中,发送到Web服务器来。Web服务器再把这些请求{发给Web serviceh处理器。请求处理器的作用在于,解析收到的SOAPhQ调用Web serviceQ然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客L?/span>

iGoogle 发表?2010-10-24 17:00

基本概念
  
  SOAP
  
  XML和XSD
  
  WSDL(Web Services Description Language)
  
  WSML(Web Services Meta Language)
  
  什么时候用Web Services
  
  Web service是创建可互操作的分布式应用程序的新^台。Web service 的主要目标是跨^台的可互操作性。ؓ了达到这一目标QWeb service 是完全基于XML、XSD{独立于q_、独立于软g供应商的标准的?/span>
  
  Web service在应用程序跨q_和跨|络q行通信的时候是非常有用的。Web service适用于应用程序集成、B2B集成、代码和数据重用Q以及通过Webq行客户端和服务器的通信的场合?/span>
  
  当然QWeb service也不是万能的Q你不能到处滥用Web service。在有些情况下,Web service 会降低应用程序的性能Q而不会带来Q何好处。例如,一台机器或一个局域网里面q行的同构应用程序就不应该用Web service q行通信?/span>
  
  如何调用Web Services
  
  客户?取得服务端的服务描述文gWSDLQ解析该文g的内容,了解服务端的服务信息Q以及调用方式。根据需要,生成恰当的SOAPh消息(指定调用的方法,已经调用的参?Q发往服务端。等待服务端q回的SOAP回应消息Q解析得到返回倹{?/span>


  服务?生成服务描述文gQ以供客L获取。接收客L发来的SOAPh消息Q解析其中的Ҏ调用和参数格式。根据WSDL和WSML的描qͼ调用相应的COM对象来完成指定功能,q把q回值放入SOAP回应消息q回l用戗?/span>
  
  高层接口
  
  使用高层接口Q不需要知道SOAP和XML的Q何信息,可以生成和使用一个WebService。Soap Toolkit 2.0通过提供两个COM对象――SoapClient和SoapServerQ来完成q些功能?/span>
  
  在客LQ只需要生成一个SoapClient实例Qƈ用WSDL作ؓ参数来调用其中的mssoapinitҎ。SoapClient对象会自动解?WSDL文gQƈ在内部生成所有Web Service的方法和参数信息。之后,你就可以像调用IDispatch接口里的Ҏ一P调用里面所有的Ҏ。在VB或是脚本语言里,你甚臛_以直接在SoapClient对象名后面直接加?Ҏ(参数…)q行调用?/span>
  
  低层接口
  
  要用低层接口,你必dSOAP和XML有所了解。你可以对SOAP的处理过E进行控Ӟ特别是要做特D处理的时候?/span>
  
  在客LQ首先要创徏一个HttpConnector对象Q负责HTTPq接。设定Connector的一些头部信息,比如EndPoinURL?SoapAction{。如果网l连接需要用代理服务器Q那也要在这里设定相关的信息。接着创徏SoapSerializer对象Q用于生成Soap消息。按照WSDL里定义,把所有参数按序序列化,得到一个完整的SOAPh消息。该Soap消息Q作为Payload通过HttpConnector 被发送到服务端。最后,生成一?/span>

菜毛毛 2010-11-15 16:57 发表评论
]]>
axis2 java.lang.reflect.InvocationTargetException http://www.aygfsteel.com/caizh2009/archive/2010/10/11/334457.html菜毛毛菜毛毛Mon, 11 Oct 2010 09:29:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/10/11/334457.htmlhttp://www.aygfsteel.com/caizh2009/comments/334457.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/10/11/334457.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/334457.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/334457.html 转蝲  axis2 java.lang.reflect.InvocationTargetException [i][/i]在用codegen1.3插g来从WSDL生成代码,C最后一步竟然出? ?An error occurred while completing process -java.lang.reflect.InvocationTargetException"的错?
产生q种错误的原因一般有2U:首先关闭eclipse?
1.jar包缺?
从AXIS2的LIB库中复制"geronimo-stax-api_1.0_spec-1.0.1.jar"?backport-util-concurrent-3.1.jar"文g到Codegen的lib目录?同时修改plugin.xml文g,d

<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
2.版本问题
F:\Program Files\MyEclipse 6.0\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml?
<plugin
   id="Axis2_Codegen_Wizard"
   name="Axis2 Codegen Wizard Plug-in"
   version="1.3.0"
   provider-name="Apache Software Foundation"
   class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin"& gt;看看自己下蝲的axis2版本是否和这个配|一_像我的是axis2-1.5.1则需修改上面的配|ؓ<plugin
   id="Axis2_Codegen_Wizard"
   name="Axis2 Codegen Wizard Plug-in"
   version="1.5.1"         //对应的版本号
   provider-name="Apache Software Foundation"
   class="org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin"> 然后再将文g夹的名字Axis2_Codegen_Wizard_1.3.0改ؓAxis2_Codegen_Wizard_1.5.1
修改完以?步重新启动eclipse卛_?

菜毛毛 2010-10-11 17:29 发表评论
]]>
利用Java~写单的WebService实例http://www.aygfsteel.com/caizh2009/archive/2010/10/09/334122.html菜毛毛菜毛毛Sat, 09 Oct 2010 09:41:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/10/09/334122.htmlhttp://www.aygfsteel.com/caizh2009/comments/334122.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/10/09/334122.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/334122.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/334122.html阅读全文

菜毛毛 2010-10-09 17:41 发表评论
]]>
axis 开?webservice HELLO WORLDhttp://www.aygfsteel.com/caizh2009/archive/2010/03/29/316846.html菜毛毛菜毛毛Mon, 29 Mar 2010 08:35:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/03/29/316846.htmlhttp://www.aygfsteel.com/caizh2009/comments/316846.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/03/29/316846.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/316846.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/316846.htmlaxis2创徏web serviceQ一Q?/strong>

 http://blog.csdn.net/chnic/archive/2008/03

/13/2179760.aspx

http://www.javaeye.com/topic/284387                                                

axis2 是新一代的web service开发工P它会让你的web service开发变得轻松,快捷。下面让我们以一个实际的例子来体验一下?/p>

首先Q工Ʋ善其事Q必先利其器。就让我们先做好一些必备的准备工作吧?/p>

 

1.下蝲axis2 ?q制的包和war,现在的最新版本是1.4.1 发布旉?008-8-25

地址 http://ws.apache.org/axis2

具体?.4.1版本的http://ws.apache.org/axis2/download/1_4_1/download.cgi

 

2.把下载后的war攑օtomcat的webapps目录里,然后启动tomcatQ这样war包就会自动解压ؓ目录axis2

在浏览器中输?a href="http://localhost:8080/axis2/">http://localhost:8080/axis2/ Q如果一切正怽会看C面的画面

 




 
 3Q就开始准备一?span class="hilite2">axis2的eclispe的插? 了?span class="hilite2">axis2的eclispe插g分ؓ2个,一个是帮助我们生成aar文g的,另一个是? 我们用wsdl文g生成stub代码的?/p>

下蝲地址?/p>

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/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip

下蝲?个压~文件后Q可以直接把解压后的文g拯到plugins目录中,也可以在links目录中写文g路径的方式来安装插gQ安装完插g后, 打开eclipseQ在package explorer 中点d?-->选择new---->other

如果安装正确你会看到



 q样准备工作都做好了。接下来是正式开发了?/p>

开发的q程Q下回分解。。。。?/p>

 

工具都已l准备齐全了。我们来动手做一个小例子来小试牛刀Q?/p>

q一节我们先利用axis2来发布一个web service 的服务,然后在下一节我们做一客户端来调用q个服务?/p>

我们的服务很单的Q就是输入一个字W串Q然后打印出一D字W串?/p>

代码很简单,主要是测试用?/p>

Java代码
  1. package com.deltaj.server;  
  2.   
  3. public class SimpleServer {  
  4.   
  5.     /** 
  6.      *  单的试Ҏ 
  7.      *  
  8.      */  
  9.     public String simpleMethod(String name) {  
  10.         return name + "Say this is a Simple method ^-^";  
  11.     }  
  12.   
  13. }  

主要的过E就是如何利用axis2的eclispe插g来发布这个服务啦?/p>

1。在eclispe 的package Explorer 中点d键,在菜单中选择新徏--->other...----->Axis2 Service Archiver


2.然后点击nextq入了类选择面Q在q个面中的Class File Location选择框中选择cL在的文g夏V?nbsp;


 3.点击next之后q入了选择 wsdl文gQ这里我们选择skip wsdl?/p>


4. 点击next之后Q进入的是选择jar文g的页面,q里我们没有外部的jarQ所以点击next直接跌q个面?/p>



 4.点击next之后Q进入的是选择xml面Q这里我们选择的是自动生成xmlQ也是N?/p>

Generate the service xml automaticallyq一?/p>



 5.点击next之后Q进入的是生成xml文g的页面,在service name 里填写这个服务所L名字Q这里我起名为simpleServer,然后在class name 中填写要发布的类Q这里一定要写全路径Q写好后可以点击load 按钮Q如果一切ok的话Q你会看到如下画?/p>




 6 点击next 后,q入的是输出artiver文g的页面,先要在output File location 中选择要输出的路径Q?/p>

   在output  File Name中输入artiver文g的名U。我L名字是simpleServer



 7.点击finish Q如果看到如下的画面Q恭喜你Q服务发布成功啦

8.接下来,我们可以把q个aar文g攑օtomcat中发布,首先把生成的aar文g拯到tomcat目录中的axis2目? service目录中位|如图?/p>



 

9.接下来启动tomcatQ在地址栏中输入http://localhost:8080/axis2 , 你会看到axis2的欢q画?/p>



 

10.点击Serviceq接Q你会看到发布的服务列表。这里面p看到我们发布的simpleService



 11.点击我们的服务simpleServer的连接,我们会看到。至此,服务发布成功?br />
 
 

   q节我们来写一个客L来调用一下这个服务。主要关注一下如何用elispe的axis2的插件来生成stub代码?

1.在eclispe 的package Explorer 中点d键,在菜单中选择新徏--->other...----->Axis2 Code Generator




 

2.点击nextQ进入下一个页面,选择从wsdl文g来生java文g?br />


 

3. 点击nextQ然后选择wsdl文gQ注意此处要填写上一节我?br />


 4.点击nextQ进入设|页面,q里我们q默认的设|?br />


 

5. 点击nextQ选择输出文g的\径?br />


  (出错解决ҎQ?/p>

除了把backport-util- concurrent-2.2.jar加到lib? ?lt;library name="lib/backport-util-concurrent-2.2.jar">
          <export name="*"/>
    </library>  到plugsin.xml
q要
1. 把Axis2_Codegen_wizard_1.3.0(eclipse/plugins/Axis2_Codegen_wizard_1.3.0)? 名字ҎAxis2_Codegen_wizard_1.4.0
2. 在plugin.xml中在<plugin>? 把Axis2_Codegen_wizard的version="1.3.0"Ҏversion="1.3.0"
5 ? eason.j 2009-05-19   引用
在MyEclipse6.5中会报错Q?
An error ocurred while completing process
-java.lang.reflect.InvocationTargetException

主要的问题在?Code Generator plugin 内缺了 backport-util-concurrent-3.1.jar 包和geronimo-stax-api_1.0_spec-1.0.1.jar 包?
[解决Ҏ] Q?

1.关闭 Eclipse

2.copy  %AXIS2_HOME%"lib" 下的
backport-util-concurrent-3.1.jar ?backport-util-concurrent-3.1.jar
复制?MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"lib 文g夹下?

3.注册?jar ?
修改MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"plugin.xml 文g
?<runtime> 內加入下面的字串
    <library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
       <export name="*"/>
   </library>
    <library name="lib/backport-util-concurrent-3.1.jar">
          <export name="*"/>
    </library>

到plugin.xml文g?保存后重新启动Eclipse卛_?/div>

)

6.点击nextQ如果看到这个页面,恭喜你已l生成代码成功?br />
 

7.在package Explorer中刷C下项目,然后你发现出?个新的文件SimpleServerStub? SimpleServerCallbackHandler 。打开SimpleServerStub你会惊喜的发现。著名的红叉一个接一个的

q是因ؓ没有axis2的类包。我们可以在下蝲的axis2-1.4.1-bin中找到lib包,把其中的jar都加入我们的工程中?/p>

然后重新~译一下工E,q时我们发现SimpleServerStubq是有几个小U叉。这个是因ؓq个插g有个bug?/p>

生成的代码没有实现序列化Ҏ。我们可以自己来加上Q在红叉上点一下,弹出一个小菜单Q选择

Add unimplemented methods .



 

8.

Java代码
  1. /** 
  2.  * ? 用发布的服务?/span> 
  3.  *  
  4.  */  
  5. public class SimpleClient {  
  6.    
  7.  public static void main(String[] args) throws Exception{  
  8.     
  9.   //初始化桩文g  
  10.   SimpleServerStub stub = new SimpleServerStub();  
  11.   //初始化SimpleMethodҎ?nbsp; 
  12.   SimpleServerStub.SimpleMethod request = new  SimpleServerStub.SimpleMethod();  
  13.   //调用simpleMethod的setNameҎ?nbsp; 
  14.   request.setName("zt");  
  15.   //  
  16.   System.out.println(stub.simpleMethod(request).get_return());  
  17.     
  18.     
  19.  }  
  20. }  

   如果一切正常,你就会看到结?/p>

log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
ztSay this is a Simple method ^-^?/p>

调用服务成功。这是个单的例子Q下节我们再做一个复杂一点的例子Q来更好的学习axis2



菜毛毛 2010-03-29 16:35 发表评论
]]>JAVA:使用Axis开发Web ServiceE序http://www.aygfsteel.com/caizh2009/archive/2009/07/19/287374.html菜毛毛菜毛毛Sun, 19 Jul 2009 15:05:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2009/07/19/287374.htmlhttp://www.aygfsteel.com/caizh2009/comments/287374.htmlhttp://www.aygfsteel.com/caizh2009/archive/2009/07/19/287374.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/287374.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/287374.html说道Web Service的程序开发,八个月前我加班调试公司和中国电信的商务领航系l的接口的时候,用的是Web ServiceQWeb Service有很多优点,使用Web Service可以在不同编E语a间实现数据交换,而我那时对Web Service也不熟,q同事帮我生成了一大堆Web Service的框架代码,我则只单独开发业务代码?

  q次的另外一个项目也要用Web Service了,不过人手也少了,没有人帮做Web Service了,只好自己动手?/p>

  好在开发前Q有个同事先l我们不熟悉Web Service的程序员q行了一些培训,我才知道原来以前的Web Service都是可以自动生成代码的,而且也不难,试了一个下午客L和服务器端的Web Service代码都调试通过了,真不错?/p>

  Z更多喜爱开发的E序员也能迅速了解Web Service的开发,我这里整理了一些通过Axis开发Web Service的一些要点,希望能让不熟悉Web Service的开发h员能够迅速掌握Web Service?/p>

  一、Axis环境的安?/p>

  1、安装环?J2SE SDK 1.4QTomcat 5.0Qeclipse 3.2?/p>

  2、到 http://xml.apache.org |站下蝲Axis安装包?/p>

  3、将Axis相关包文件放在WEB-INF\lib目录下?/p>

  4、Axis可选的包:activation.jarQ?mail.jarQ?xmlsec-1.4.Beta1.jar拯到WEB-INF目录下,生成客户端时候需要用?/p>

  Axis支持三种web service的部|和开发,分别为:

  1、Dynamic Invocation Interface QDIIQ?/p>

  2、Dynamic Proxy方式

  3、Stubs方式

  前两U方式我׃介绍了,同事告诉我他们自己都不用前两种方式Q他们徏议我们用Stubs方式Q因此我׃要就介绍一下第三种方式。注意,我自qJava源代码是攑֜DQ\workspace\test\目录下,Axis相关包文件放在DQ\workspace\test\WEB-INF目录下?/p>

  二、编写wsdd发布web服务Q编写stub client讉Kweb服务

  1、编写服务端E序serverQSayHello.javaQ编译server.SayHello.java

package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}

  2、编写wsdd文g

  3、发布服务:

  ~辑一个deploy.batQAxis_Lib为axis.jar路径。内容如下:

set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

  执行q个批处理文Ӟq时候,如果提示成功的话Q访问http://localhost:8080/test/services ׃昄服务列表?/p>

  4、生成客Lclient stub文g

  在浏览器上访问服务器端的服务Q可以下载到WSDL文gQ通过Axis的相兛_P可以自动从WSDL文g中生成Web Service的客L代码?/p>

  ~写一个WSDL2Java.bat文gQ其内容如下Q?/p>

set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

  执行q个批处理文件就可以生成client stub.

  生成的stub client文g列表为:SayHello.javaQSayHelloService.javaQSayHelloServiceLocator.javaQSayHelloSoapBindingStub.java .

  5、编写客LE序Q编译ƈ执行

  下面是一Djunit试客户端代码?/p>

import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestWSClient extends TestCase {

    public TestWSClient(String string) {
        super(string);
    }

    public void SayHelloClient() throws Exception {

        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println(retValue);

    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }
}

  xQ整个服务器端和客户端的Web Service框架代码完成了Q剩下的是在里面加入你的业务代码了Q怎么PWeb Serviceq不隑ּ发吧?/p>

菜毛毛 2009-07-19 23:05 发表评论
]]>
վ֩ģ壺 ԭ| Ϳ| | | | | Ȫ| | ԭ| ƺ| | ٹ| | ͭ| ƶ| Ԫı| | | ɳ| | | | | | | | ӱʡ| | | | | | | | ʯ| | | | | | |