??xml version="1.0" encoding="utf-8" standalone="yes"?>成人av影音,欧美成人亚洲成人日韩成人,亚洲色图av在线http://www.aygfsteel.com/baoyaer/category/19998.htmljavazh-cnSat, 16 Jun 2007 23:23:55 GMTSat, 16 Jun 2007 23:23:55 GMT60使用Handler来增强Web服务的功?http://www.aygfsteel.com/baoyaer/articles/124227.html大田?/dc:creator>大田?/author>Thu, 14 Jun 2007 01:28:00 GMThttp://www.aygfsteel.com/baoyaer/articles/124227.htmlhttp://www.aygfsteel.com/baoyaer/comments/124227.htmlhttp://www.aygfsteel.com/baoyaer/articles/124227.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/124227.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/124227.html阅读全文

]]>
jsp 调用webservice 实例 http://www.aygfsteel.com/baoyaer/articles/116489.html大田?/dc:creator>大田?/author>Thu, 10 May 2007 06:46:00 GMThttp://www.aygfsteel.com/baoyaer/articles/116489.htmlhttp://www.aygfsteel.com/baoyaer/comments/116489.htmlhttp://www.aygfsteel.com/baoyaer/articles/116489.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/116489.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/116489.html1.  Download axis-1_1-src.tar

http://ws.apache.org/axis/

http://ws.apache.org/axis/download.cgi

 

2.  unpack to d:/axis-1_1

3.配置pȝ环境变量

Windows:
set AXIS_HOME=D:\opensource\axis\axis-1_1
set AXIS_LIB=%AXIS_HOME%\lib
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;
%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saajjar;
%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\wsdl4j.jar;

How to use WSDL2Java

 

Given a WSDL file of a web service you can manually code a client based on your understanding of WSDL document or you can use a tool to do that for you. This is very handy when WSDL is very complex. Axis provides such tool. Here is the command that you can run on GoogleSeach.wsdl. 

java org.apache.axis.wsdl.WSDL2Java --verbose GoogleSearch.wsdl
Make sure that you have axis.jar file in your classpath while executing this command, as that is where org.apache.axis.wsdl.WSDL2Java resides. 

You will find a number of .java files generated in a subdirectory named GoogleSearch. These are the stub files or wrapper classes. The wrapper classes allow you to code in java data types and convert them transparently to XML.

在网上google 一个有效的wsdl:
http://www.webservicex.com/stockquote.asmx?WSDL

生成java c:
D:\projects\test\webservice\src>java org.apache.axis.wsdl.WSDL2Java --verbose http://www.webservicex.com/stockquote.asmx?WSDL

Parsing XML file:  http://www.webservicex.com/stockquote.asmx?WSDL
Generating NET\webserviceX\www\StockQuote.java
Generating NET\webserviceX\www\StockQuoteLocator.java
Generating NET\webserviceX\www\StockQuoteSoap.java
Generating NET\webserviceX\www\StockQuoteSoapStub.java

建立工程?java test

import NET.webserviceX.www.StockQuoteLocator;
import NET.webserviceX.www.StockQuoteSoap;


/**//**
 * 
@author andy.zhang
 
*/

public class Test {
    
public static void main(String[] arg){
        StockQuoteLocator binding
=new StockQuoteLocator();
           
try {
                StockQuoteSoap port
=binding.getStockQuoteSoap();
                String str
=port.getQuote("IBM");
                System.out.println(str);
           }

           
catch(Exception e){
           }

    }

}



q行试Q?br>D:\projects\test\webservice\classes>java -classpath %classpath%;.;NET.webservice
X.www.*; Test

<StockQuotes>
    
<Stock>
        
<Symbol>IBM</Symbol>
        
<Last>92.37</Last>        
        
<Date>3/4/2005</Date>
        
<Time>4:00pm</Time>
        
<Change>-0.04</Change>
        
<Open>92.94</Open>
        
<High>93.18</High>
        
<Low>92.36</Low>
        
<Volume>4754000</Volume>
        
<MktCap>150.8B</MktCap>
        
<PreviousClose>92.41</PreviousClose>
        
<PercentageChange>-0.04%</PercentageChange>
        
<AnnRange>81.90 - 99.10</AnnRange>
        
<Earns>4.94</Earns>
        
<P-E>18.71</P-E>
        
<Name>INTL BUSINESS MAC</Name>
    
</Stock>
</StockQuotes>
D:\projects\test\webservice\classes>
成功了。:Q?br>

q样Q就完成了对.NET WebService端的调用?/span>

(data filetype:mdb)







 



 



]]>
用axis发布webservices相关内容索引http://www.aygfsteel.com/baoyaer/articles/116476.html大田?/dc:creator>大田?/author>Thu, 10 May 2007 06:25:00 GMThttp://www.aygfsteel.com/baoyaer/articles/116476.htmlhttp://www.aygfsteel.com/baoyaer/comments/116476.htmlhttp://www.aygfsteel.com/baoyaer/articles/116476.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/116476.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/116476.html
用axis发布webservicesQ一Q?/font>
前两q就开始用axis做过一些webservcies的东西,现在希望对一些没怎么接触q的人有些帮助,主要是一个简单的例子?

用axis发布webservicesQ二Q?/font>
主要介绍一些基本的webservices的基本概念和描述

用axis发布webservicesQ三Q?/font>
主要介绍在axis的webservics中如何传入对象类型或q回对象cd的操作,以及怎样获得讉K者的ip地址

用axis发布webservicesQ四Q?/font>
一不错的文章Q主要关于axis webservices讉K权限及安全访问控制方面的内容Q且我都试验成功q?br>
用axis发布webservicesQ五Q?/font>
用WS-Security 实现axis webservices加密的方?

]]>
WSDL 规则解释http://www.aygfsteel.com/baoyaer/articles/116413.html大田?/dc:creator>大田?/author>Thu, 10 May 2007 02:50:00 GMThttp://www.aygfsteel.com/baoyaer/articles/116413.htmlhttp://www.aygfsteel.com/baoyaer/comments/116413.htmlhttp://www.aygfsteel.com/baoyaer/articles/116413.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/116413.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/116413.html剙分由抽象定义l成Q而底部分则由具体描述l成。抽象部分以独立于^台和语言的方式定义SOAP消息Q它们ƈ不包含Q何随机器或语a而变的元素。这定义了一pd服务Q截然不同的|站都可以实现。随|站而异的东西如序列化便归入底部分,因ؓ它包含具体的定义?br>l 抽象定义
        Types
            独立与机器和语言的类型定?

  Messages
           包括函数参数Q输入与输出分开Q或文档描述

  PortTypes
           引用消息部分中消息定义来描述函数{֐Q操作名、输入参数、输出参敎ͼ

2 具体定义
        Bindings
       PortTypes部分的每一操作在此l定实现

  Services
          定每一l定的端口地址



下面的图中,头q接W代表文档不同栏之间的关pR点和箭头代表了引用或用关pR双头代表"修改"关系?-D的箭头代表了包含关系。这P各Messages栏用Types栏的定义QPortTypes栏用Messages栏的定义QBindings栏引用了PortTypes栏,Services栏引用Bindings栏,PortTypes和Bindings栏包含了operation元素Q而Services栏包含了port元素。PortTypes栏里的operation元素由Bindings栏里的operation元素q一步修Ҏ描述?br>



首先看看一D늮单的JAVA代码,我们用它作ؓWSDL的服务实C?

public class Test{
  
public String echo(String u){
    
return "Hello " + u;
  }

}



看看它导出的文gQ?br>

 

  //W一行申明该文档是XML。尽这q不是必需的,但它有助于XML解析器决定是否解析WSDL文g或只是报错。第二行是WSDL文档的根元素Q?lt;definitions>。一些属性附属于根元素,像<schema>子元素对?lt;types>元素?br>
    <?
xml version="1.0" encoding="UTF-8" ?> 
<wsdl:definitions targetNamespace="http://localhost/axis/Test2.jws"
                                      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
                                      xmlns:xsd
="http://www.w3.org/2001/XMLSchema" 
                                      xmlns:soapenc
="http://schemas.xmlsoap.org/soap/encoding/" 
                                      xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
                                      xmlns:apachesoap="http://xml.apache.org/xml-soap" 
                                      xmlns:intf
="http://localhost/axis/Test2.jws" 
                                      xmlns:impl
="http://localhost/axis/Test2.jws">
<!-- 
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)

  
--> 

定义好操作(或方法)以后Q现在需要指定将向它们发送和从它们返回的参数。在 WSDL 术语中,所有参数称?#8220;消息”。认为您是在递送消息而结果得到返回的消息是有用的。方法调用是q样一U操作:它准备返?#8220;消息”来响应进入的消息?/span>



<message>元素包含了Messages栏。如果我们把操作看作函数Q?lt;message>元素定义了那个函数的参数?lt;message>元素中的每个<part>子元素都和某个参数相W。输入参数在<message>元素中定义,与输出参数相隔离--输出参数有自q<message>元素。兼作输入、输出的参数在输入输出的<message>元素中有它们相应?lt;part>元素。输?lt;message>元素?Response"l尾Q就像以前所用的"fooResponse"。每?lt;part>元素都有名字和类型属性,像函数的参数有参数名和参数cd?br>
<wsdl:message name="echoResponse">   //q回的消?/font>
  
<wsdl:part name="echoReturn" type="xsd:string" /> 
  
</wsdl:message>
<wsdl:message name="echoRequest">  //h的消?/font>
  
<wsdl:part name="u" type="xsd:string" /> 
  
</wsdl:message>

<definitions> 元素包含一个或多个 <portType> 元素Q实际上Q每个元素都是您希望表示的一pd operation 。或者,您也可以单?portType 元素看作是将各种Ҏl成cȝ一个逻辑分组。例如,如果您的供应铄理解x案需要在客户和供应商之间q行交互Q您最可能做的是分别定义与他们交互的功能性;也就是说Q您ؓ用户和供应商各定义一?portType。应该将每个 portType UCؓ 服务Q因此整?WSDL 文g成Z个服务集合?

<wsdl:portType name="Test2">   //一个portType可以看成一个类
<wsdl:operation name="echo" parameterOrder="u">   //一个operation是一个方?/font>
  
<wsdl:input name="echoRequest" message="impl:echoRequest" />   //输入消息
  
<wsdl:output name="echoResponse" message="impl:echoResponse" />  //q回消息
  
</wsdl:operation>
  
</wsdl:portTyp>

消息传递和传输:
我以一U抽象方式定义了操作和消息,而不考虑实现的细节。实际上QWSDL 的Q务是定义或描q?Web 服务Q然后提供一个对外部框架的引用来定义 WSDL 用户如何实现这些服务。可以将q个框架当作 WSDL 抽象定义和它们的实现之间?#8220;l定Q?binding Q?#8221;?br>

当前Q最行的绑定( binding Q技术是使用单对象访问协?/span>QSOAPQ。WSDL 指定能够访?Web 服务实际实现?SOAP 服务器,q且从那时v SOAP 的整个Q务就是将用户?WSDL 文g带到它的实现?br>


WSDL ~写的第三个步骤是描q将 SOAP ?WSDL 文gl定CLq程。您把 <binding> 元素包括?<definitions> 元素内。这?binding 元素应该?name ?type 属性?name 标识这个绑定?type 标识您希望与这个绑定相兌?portTypeQ一l操作)?br>
     
<wsdl:binding name="Test2SoapBinding" type="impl:Test2">

  <wsdlsoap:binding/> 元素。该元素的用途是声明把 SOAP 作ؓl定和传输服务?br>

  <wsdlsoap:binding> 元素有两个属性:style ?transport。style 是一个可选属性,它描q该l定内操作的性质。transport 属性指?HTTP 作ؓ该绑定将使用的别较低的传输服务。SOAP 客户机将?WSDL 文g中读?SOAP l构q与另一端的 SOAP 服务器协?
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> 

 WSDL <operation> 元素Q分别表C具体的操作。每?<operation> 元素提供各自操作的绑定细节。因此,我提供了另一?extensibility 元素Q即 <wsdlsoap:operation/> Q仍然是一个空元素Q与它发生的那个操作相关Q。该 <soap:operation/> 元素有一?soapAction 属性,SOAP 客户机将使用该属性创?SOAP h?

    //下面WSDL描述与具体实现进行绑?q里采用SOAP方式

<wsdl:operation name="echo">
  
<wsdlsoap:operation soapAction="" /> 
<wsdl:input name="echoRequest">
  
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" /> 
  
</wsdl:input>
<wsdl:output name="echoResponse">
  
<wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/axis/Test2.jws" /> 
  
</wsdl:output>
  
</wsdl:operation>
  
</wsdl:binding>
//下面发布的服务与前面的SOAPl定q行兌
<wsdl:service name="Test2Service">
<wsdl:port name="Test2" binding="impl:Test2SoapBinding">
  
<wsdlsoap:address location="http://localhost/axis/Test2.jws" /> 
  
</wsdl:port>
  
</wsdl:service>



 每个namespace属性都声明了一个羃略语Q用在文档中。例?xmlns:xsd"׃ؓ http://www.w3.org/2001/XMLSchema定义了一个羃略语QxsdQ。这允许对该namespace的引用只需单的在名字前加上前缀可以了Q如Q?xsd:int"中的"xsd"是合法的类型名。普通范围规则可q用于羃略前~。也是_前缀所定义的元素只在元素中有效?br>
  Namespacez什么用Qnamespace的作用是要避免命名冲H。如果我建立一Web ServiceQ其中的WSDL文g包含一个名?foo"的元素,而你惌使用我的服务与另一Ҏ务连接作充,q样的话另一Ҏ务的WSDL文g׃能包含名?foo"的元素。两个服务器E序只有在它们在两个事例中表C完全相同的东西Ӟ才可以取相同的名字。如果有了表C区别的namespaceQ我的网l服务里?foo"可以表C完全不同于另一个网l服务里"foo"的含义。在你的客户端里Q你只要加以限制可以引用我?foo"?br>
  见下例:http://www.infotects.com/fooService#foo 是完全限制的名字,相当?carlos:foo"Q如果我声明了carlos作ؓhttp://www.infotects.com/fooService的快h式。请注意namespace中的URL是用来确定它们的唯一性的Q同时也便于定位。URL所指向的地方不必是实际存在的网l地址Q也可以使用GUID来代替或补充URL。例如,GUID"335DB901-D44A-11D4-A96E-0080AD76435D"是一个合法的namespace指派?br>
  targetNamespace属性声明了一个namespaceQ元素中所有的声明的名字都列于其内。在WSDLCZ中,<definitions>的targetNamespace ?a >http://tempuri.org/wsdl。这意味着所有在WSDL文档中声明的名字都属于这个namespace?lt;schema>元素有自qtargetNamespace属性,其gؓ http://tempuri.org/xsd Q在<schma>元素中定义的所有名字都属于q个namespace而不是main的target namespace?/p>

  <schema>元素的以下这行声明了默认的namespace。Schema中所有有效的名字都属于这个namespace?/p>

]]>
axis学习W记http://www.aygfsteel.com/baoyaer/articles/116219.html大田?/dc:creator>大田?/author>Wed, 09 May 2007 08:42:00 GMThttp://www.aygfsteel.com/baoyaer/articles/116219.htmlhttp://www.aygfsteel.com/baoyaer/comments/116219.htmlhttp://www.aygfsteel.com/baoyaer/articles/116219.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/116219.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/116219.html阅读全文

]]>
用Axis 1.1 for Javaq行Web Services开?/title><link>http://www.aygfsteel.com/baoyaer/articles/99393.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Mon, 12 Feb 2007 03:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/99393.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/99393.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/99393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/99393.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/99393.html</trackback:ping><description><![CDATA[ <br />  <br />  下面的所有几乎来自Axis1.1的文档。但不完全来自文档,本h做了部分修改Q这些修改完全出自国内读者的需要?br />  <br />  <b>什么是SOAPQ?/b><br />  <br />  SOAP是一个基于XML的用于应用程序之间通信数据~码的传输协议。最初由微Y和Userland Software提出Q随着不断地完善和改进QSOAP很快被业界广泛应用,目前完全发布版本?.1。在其发展过E中QW3C XML标准工作组U极促成SOAP成ؓ一个真正的开放标准。在写作此文档之ӞSOAP1.2草案已经发布Q?.2?.1中相Ҏ؜q部分做了改进?br />  <br />  SOAP被广泛作为新一代跨q_、跨语言分布计算Web Services的重要部分?br />  <br />  q里太肤的说明Q请参阅我的整理《一步一步学习SOAP》?br />  <br />  <b>什么是Axis?</b><br />  <br />  Axis本质上就是一个SOAP引擎Q提供创建服务器端、客L和网关SOAP操作的基本框架。Axis目前版本是ؓJava~写的,不过为C++的版本正在开发中?br />  <br />  但Axisq不完全是一个SOAP引擎Q它q包括:<br />  <br />  是一个独立的SOAP服务器?br />  <br />  是一个嵌入Servlet引擎Q例如TomcatQ的服务器?br />  <br />  支持WSDL?br />  <br />  提供转化WSDL为Javacȝ工具?br />  <br />  提供例子E序?br />  <br />  提供TCP/IP数据包监视工兗?br />  <br />  Axis是第三代Apache SOAPQ从2000qvQSOAP v2开发小l开始讨论如何让Axis更加灉|、可配置Q以及能够处理SOAP和来自W3C的各UXML标准。通过不断地讨论和代码~写QAxis目前取得了如下成果:<br />  <br />  速度提高?Axis通过Z事g的SAX对XML文档q行处理Q从而在速度和效率上比Apache SOAP有所提高?br />  <br />  灉|性提高?br />  <br />  E_性提高?br />  <br />  提供面向lg的部|Ӏ?br />  <br />  提供一个简z的传输抽象框架。其核心引擎完全于传输方式独立。从而Z何种协议传输的选择更加灉|?br />  <br />  支持WSDL。包括到处WSDL和客户代理生成等?br />  <br />  <b>在目前发?.1版本中有什么东西?</b><br />  <br />  SOAP1.1/1.2引擎?br />  <br />  灉|的配|和部vpȝ?br />  <br />  支持及时自动生成SOAP服务QJWSQ?br />  <br />  支持所有的基本数据cdQؓ自定义串行操作提供类型映系l?br />  <br />  JavaBean的自动串行操作,包括自定义属性类型映到XML的属性和元素?br />  <br />  RPC和基于消息的SOAP服务提供者?br />  <br />  从部|好的服务自动生成WSDL?br />  <br />  WSDL2Java工具可以从WSDL描述文g中生相应的客户和服务器端SOAP操作框架?br />  <br />  初步提供安全扩展Q能够与Servlet2.2安全集成?br />  <br />  通过HTTP Cookie和与传输无关的SOAP头信息提供会话跟t?br />  <br />  初步支持带附件的SOAP消息?br />  <br />  在EJB斚w提供把EJB作ؓWeb服务的访问途经?br />  <br />  ZServlet的HTTP传输?br />  <br />  ZJMS的传输?br />  <br />  独立的服务器Q但需要HTTP 服务器和Servlet容器支持Q?br />  <br />  提供客户端、服务器端相兛_用程序的样例?br />  <br />  Axis的运行需要如下组件包<br />  <br />  axis.jar<br />  <br />  jaxrpc.jar<br />  <br />  saaj.jar<br />  <br />  commons-logging.jar<br />  <br />  commons-discovery.jar<br />  <br />  wsdl4j.jar<br />  <br />  W合JAXP-1.1的XML处理器?br />  <br />  一步一步开始用Axisq行Web Services操作<br />  <br />  下面l出一D늮单的调用Web ServicesҎ的客L代码Q由于原文档中直接用导入包的方式初学者不易了解那个类在那个包中,所以下面我做了一些简单的修改Q希望能l学习者清晰的思\Q:<br />  <br />  public class TestClient {<br />  <br />  public static void main(String[] args) {<br />  <br />  try{<br />  <br />  String endpoint="http://localhost:8080/axis/SayHello.jws?wsdl";// 调用的web服务的url地址Q这里是一个httphQ希望得到的l果是wsdl文档?br />  <br />  org.apache.axis.client.Service service=new org.apache.axis.client.Service();//建立h服务框架实例?br />  <br />  /*<br />  <br />  * org.apache.axis.client.Service实现JAX-RPC's javax.xml.rpc.Services接口<br />  <br />  * 该接口充当生下面提到的org.apache.axis.client.Call实例<br />  <br />  * 的角艌Ӏ?br />  <br />  */<br />  <br />  org.apache.axis.client.Call call=(org.apache.axis.client.Call)service.createCall();//从框架中生成一个维护调用的实例?br />  <br />  /*<br />  <br />  * org.apache.axis.client.Call实现了JAX-RPC's javax.xml.rpc.Call接口?br />  <br />  */<br />  <br />  call.setTargetEndpointAddress(new java.net.URL(endpoint));<br />  <br />  call.setOperationName(new javax.xml.namespace.QName("http://www.edu-edu.com.cn/luopc/ws","echoString"));//讄需要调用的函数名称<br />  <br />  String result=(String)call.invoke(new Object[]{"hello!"});<br />  <br />  System.out.println(result);<br />  <br />  }catch(Exception e){<br />  <br />  System.err.println(e.toString());<br />  <br />  }<br />  <br />  }<br />  <br />  }<br />  <br />  上面的代码可能和原文档中不同Qƈ且在名称I间、函数多态上会给用户造成p涂。不q别急,我在译手册的同时会加入很多解释的代码,如果哪位Ua看不懂可以通过邮g获取帮助Qluopc@edu-edu.com.cn Q邮件主题必L我提供的文档名称?br />  <br />  通过上面的调用代码,最l生成向服务器请求SOAP信息包,具体XML内容如下Q?br />  <br />  <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">  <arg0 xsi:type="xsd:string">Hello!</arg0> </ns1:echoString> </SOAP-ENV:Body></SOAP-ENV:Envelope><br />  <br />  q里我不再多,l心的朋友请从代码中扄应的对应信息来进行自q逻辑理解。至于SOAP协议在我以后的翻译文档中会加入进厅R?br />  <br />  从上面的代码中我们在调用的时候输入了参数new Object[]{“hello!”}。然后从生成的SOAPh包中可以看到自动序列化成<arg0 xsi:type="xsd:string">Hello!</arg0>。你可以看到参数名称为arg0Q类型ؓxsd:string。其实在Axis客户端我们可以直接通过具体的方法来讄每一个参数名U、类型以及返回值类型。如下代码:<br />  <br />  call.addParameter("testParam",  org.apache.axis.Constants.XSD_STRING,  javax.xml.rpc.ParameterMode.IN);call.setReturnType(org.apache.axis.Constants.XSD_STRING);<br />  <br />  加入上面的代码之后生成如下的SOAP信息Q?br />  <br />  <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">  <testParam xsi:type="xsd:string">Hello!</testParam> </ns1:echoString> </SOAP-ENV:Body></SOAP-ENV:Envelope><br />  <br />  可以作简单的Ҏ?br />  <br />  也许你会疑惑讄参数名称和不讄参数名称有什么区别的疑问。这里作单的解释Q?br />  <br />  1. Z么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)Q?br />  <br />  上面你可以调用或者可以不调用Q但当返回结果中没有标明数据cd时Axis׃知道如何q行数据cd转换。当然如果返回类型你很清楚ƈ且返回应{SOAP的结果中表明了相应的数据cd你便可以不进行上面的函数调用?br />  <br />  2. Z么要讄参数名称和类型?<br />  <br />  好了Q下在你知道了如何调用Web Services了,下面告诉你如何写作和发布Web Services?br />  <br />  通过Axis发布Web Services<br />  <br />  q里写作一个简单的c,然后一步一步进行发布。希望用戯够从中理Z些思\来。我在其他的关于Web Services的文章中会专门针对Web Services的通用发布Ҏ。虽然Web Services牉|到很多复杂的知识Q但请大家不要感觉到q些操作单,也许你已l有很多疑问Q没关系Q记下你的疑问,不断的投试?br />  <br />  public class SayHello {  public String echoString(String hello){    return hello;  }}<br />  <br />  哈哈Q这个类是不是太单了?br />  <br />  一步一步来?br />  <br />  Axis提供两种Javacd布成Web Services的途径Q即x快速自动发布和通过配置文gq行发布。我们首先从最Ҏ部v的入手?br />  <br />  JWS----x部v<br />  <br />  单说是自己写的JavacL文g按一定的规则Copy到特定的目录下便可自行被Axis部v。具体步骤如下:<br />  <br />  上面写的SayHello.java复制到axis目录下?br />  <br />  改名为SayHello.jws?br />  <br />  注意Q在你写的类中不能有具体包的信息Q因正是Axisx部v不支持的?br />  <br />  q行我们前面写的客户端进行测试,q行l果是hello!?br /> <br />       目前你是否有如下的问题?<br /><br />       如果cM用多态的函数如何处理?<br />   <br />      其实很简单,我们知道在每ơ发用请求之前代理程序在后台会直接请求你l的URLQ这里是http://localhost:8080/axis/SayHello.jws?wsdlQ其实这一hq回来的是WSDL描述文gQ通过具体的描q文件的内容和你输入的参数的cd比较Q最l确定发送什么请求。细节上的解释需要用户阅读SOAP的具体内宏V我也会提供相应的权威文当翻译的?br /><br />      Axis的客L默认是通过HTTP协议传输吗?<br /><br />      如何自己定义的cdq行映射Q?br />      <br />      通过WSDD自定义部|?br /><br />      上面的自动部|相当简单,但当你需?br />      <br />         映射自己的类型时<br />         不需要暴露源代码?br />         需要自q路径和包理?br />         对用h作Web Services的事件进行相应时<br /><br />      需要通过WSDD来自定义部v?br />      <br />      前面新特性中提到q,Axis是一个很灉|的可配置pȝQ但在配|之前你得懂得Axis Web Services描述文档QWSDDQ的格式和意义。这里有一个简单的例子Qdeploy.wsddQ:<br />    <pre class="overflow">   <deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />       xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><br />     <service name="SayHello2" provider="java:RPC"><br />      <parameter name="className" value="luopc.ws.SayHello"/><br />      <parameter name="allowedMethods" value="*"/><br />     </service><br />    </deployment></pre><br />      很简短的描述׃自定义对特定cMWeb Services的Ş式发布。上面的每一个servicew会意味着开通一个相应的可被WSDL文g引用的服务。其内部描述信息会描述从请?处理h-应答需要的所有核心信息。这里provider=”java:RPC”对应着相应的服务类为org.apache.axis.providers.java.RPCProvider。其实你可以通过多种方式提供相应的服务。在关于Axis的架构文章中会详细解释q些内容?br /><br />      上面的各个参数我不再解释Q我惛_家一看就明白?br />      <br />      下面让我们在上面的简单配|上开始一步一步的q行各种高配置Q?br />      <br />      服务存活范围<br />      <br />      Axis提供Session、Request和Application三种可选范围配|。具体配|标CؓQ?br /><pre class="overflow"><service name="MyService"...><br />  <parameter name="scope" value="value"/><br />  ...<br /></service></pre><br />一旦你完成上面的文件。可以写一个脚本批处理文g来完成部|Ӏ批处理文g如下Q?br /><pre class="overflow">java -classpath F:\resource\tools\axis-1_1\lib\axis.jar;F:\resource\tools\axis-1_1\lib\commons-discovery.jar;F:\resource\tools\axis-1_1\lib\jaxrpc.jar;F:\resource\tools\axis-1_1\lib\commons-logging.jar;F:\resource\tools\axis-1_1\lib\log4j-1.2.8.jar;F:\resource\tools\axis-1_1\lib\wsdl4j.jar;F:\resource\tools\axis-1_1\lib\j2ee.jar org.apache.axis.client.AdminClient sayHelloD.wsdd?/pre><br />      上面的一些jar文g都是Axisq行需要的lgQ所以必L加到环境中。上面的目录是我的机器里的目录,你可以按自己的目录进行?br />   <br />      如果部v成功Q会输出<Admin>Done processing</Admin>信息?br />但本里再几个Q?br />         你首先要你~译好的cL到axis/web-inf/classes/下面?br />         可以通过<a href="http://localhost:8080/axis/services/SayHello2">http://localhost:8080/axis/services/SayHello2</a>来调用?br />         你可以从我的配置文g中发C包的概念?br />         可以用相应的xml文gq行卸蝲已部|的服务?br />        <br />       卸蝲Ҏ如下Q?br />         ~写如下XML文档<br /><pre class="overflow"><undeployment xmlns="http://xml.apache.org/axis/wsdd/"><br /> <service name="MyService"/><br /></undeployment></pre><br />      把上面的批处理文件中的sayHelloD.wsdd换成该文件便可?br /><br />      l箋x高部v<br /><br />      如果你想知道自己的某个Web Services被调用多次Q你应该怎么做呢Q?br />Axis提供了相应的跟踪机制?br /><br />      首先你应该编写一个满一定接口的事g处理cR?br />      <br />      在配|文件中d事g处理器信息?br /><br />     我们先看看配|文件中的信息:<br /><pre class="overflow"><deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><br />  <!-- define the logging handler configuration --><br /> <handler name="track" type="java:samples.userguide.example4.LogHandler"><br />  <parameter name="parameter1" value="讉K该services"/><br /> </handler><br /> <!-- define the service, using the log handler we just defined --><br /> <service name="SayHello2" provider="java:RPC"><br />  <requestFlow><br />   <handler type="track"/><br />  </requestFlow><br />  <parameter name="className" value="luopc.ws.SayHello"/><br />  <parameter name="allowedMethods" value="*"/><br /> </service><br /></deployment></pre><br />      上面的绿色部分v到核心的配置信息提供?br /><br />      下面提供一个事件处理类Q同h自原文档Q但Z更清晰我同样所有的cd面加上了包名U?br />package luopc.ws;<br /><br />/**<br />* @author luopc<br />*/<br />public class EventHandler extends org.apache.axis.handlers.BasicHandler{<br />    public void invoke(org.apache.axis.MessageContext mtxt){<br />        String param=(String)getOption("parameter1");<br />        System.out.println(param);<br />    }<br /><br />    public static void main(String[] args) {<br />    }<br />}<br /><br />      pP我们对请求跟t了。嘻嘅R?br /><br />      可以q程q行理Q不推荐Q?br /><br />      前面提到服务类型的问题Q在Axis有四U类型的服务Q分别ؓRPC、Document、Wrapped和Message?<br />  <font color="#0000ff"><strong>Axis?WebService 的调用问?br /></strong></font><font color="#000000">人按照网上例子制作一个SampleQ遇C个问题,当用JAVA~写的客L调用q回值类型是int的函数时能正得到返回|但是调用q回值类型是String的函数时Q不能正得到返回倹{以下ؓ服务器端E序源代码:<br />  <br />  /**<br />  * 此处插入cd描述?br />  * 创徏日期Q?2005-10-27 10:32:48)<br />  * @authorQAdministrator<br />  */<br />  import java.util.*;<br />  <br />  public class ZxjTest {<br />  protected String name="gaga";<br />  protected int age=20;<br />  protected int sex=22;<br />  protected List items=new ArrayList();<br />  /**<br />  * ZxjTest 构造子注解?br />  */<br />  public ZxjTest() {<br />  super();<br />  }<br />  public String getName()<br />  {<br />  return name;<br />  }<br />  public int getAge()<br />  {<br />  return age;<br />  }<br />  public int getSex()<br />  {<br />  return sex;<br />  }<br />  public List getItems()<br />  {<br />  return items;<br />  }<br />  }<br />  <br />  客户端调用的源代码:<br />  String endpoint = "http://myserver:7001/ZxjTest.jws";<br />  Service service = new Service();<br />  Call call = (Call) service.createCall();<br />  call.setTargetEndpointAddress(new java.net.URL(endpoint));<br />  call.setOperationName("getName");<br />  String ret = (String) call.invoke(new Object[] {});<br />  <br />  出错的就是最后一句。如果这一句改成调用返回值是Int的函敎ͼ׃会出错。请问,q是Axis的配|的问题吗?如果是,该如何改Q?br />  <br />  应该不大可能是Axis的配|的问题Q你调用的是<br />  <br />  public String getName()<br />  {<br />  return name;<br />  }<br />  <br />  因此q回的是StringQ这个是没有错误的!<br />  <br />  你的E序我在自己机器上运行的很好Q不调用哪个方法,都一栯出。你可以把String ret = (String) call.invoke(new Object[] {});ҎObject ret = (Object)call.invoke(new Object[] {});q样的话你就不用ȝ型{换了Q?br />  <br />  或者如果你要类型{换的话,也可以这样做Q?br />  <br />  1Q如果调用返回类型是string的方?那么最后一句应该ؓ<br />  <br />  String ret = (String) call.invoke(new Object[] {});<br />  <br />  2Q如果调用返回类型是int的方法,那么最后一句应该ؓ<br />  <br />  Integer ret = (Integer)call.invoke(new Object[] {});<br />  <br />  q有要注意的是在利用客户端进行测试的时候,保服务器已l启动,否则会出错。如果你是采用http://myserver:7001/ZxjTest.jws的话Q你的web-inf下确保没?br />  <br />  server-config.wsddQ否则也会出错?br />  <br />  q有一个很单的错误Q可能仅仅只是WebLogic配置的问题。最好重Z个应用ƈ重新配置?/font><img src ="http://www.aygfsteel.com/baoyaer/aggbug/99393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2007-02-12 11:13 <a href="http://www.aygfsteel.com/baoyaer/articles/99393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">봨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">μ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˻</a>| <a href="http://" target="_blank">ҵ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank">γ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">¹</a>| <a href="http://" target="_blank">˴</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ߺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>