基于axis2的webservice

最近在学习webservices,看官网说明,觉得挺简单,写篇文章供大家参考。//具体作用就不说了,大家都懂的。

到apache官网下载axis2http://axis.apache.org/axis2/java/core/download.cgi推荐下载

1.6.2 Release (Mirrored) Binary Distribution zip
版本。解压后,待用。

具体步骤:

1.新建axis2 web工程。

拷贝解压文件下lib内的jar包到工程WEB-INF下的lib文件夹内。//效果如下图,下面说明

基于axis2的webservice_第1张图片

找到解压文件的webapp文件夹,拷贝目录下的axis2-web文件到axis2工程下的WebRoot根目录。在工程的WEB-INF下新建services文件夹(名字必须是services),在services下新建axis2文件夹(这个名字没有约束),再在下面新建META-INF文件夹,最后在META-INF下新建services.xml文件,内容如下:

<service name="axis2" scope="application" targetNamespace="http://quickstart.samples/">
    <description>
        Stock Quote Service
    </description>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                         class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                         class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <schema schemaNamespace="http://quickstart.samples/xsd"/>
    <parameter name="ServiceClass">com.jhb.TestAxis2</parameter>
</service>

ps:com.jhb.TestAxis2是自己建立的java类,下面说明。

在web.xml文件内增加如下内容:

<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis2.transport.http.AxisServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

新建java类TestAxis2(包名是com.jhb),与<parameter name="ServiceClass">com.jhb.TestAxis2</parameter>里的内容一致。

在TestAxis2内提供一个方法:如下

public String testHello(String name){
return name;
}

然后就是部署启动tomcat服务器。在地址栏里输入:http://localhost:8080/axis2/services/listServices回车/* axis2是工程名*/

出现如下界面说明启动成功。

基于axis2的webservice_第2张图片

图片中的axis2超链接是services.xml文件内的name名。testHello是是提供的方法名。点击axis2链接,进入一个页面,链接地址为http://localhost:8080/axis2/services/axis2?wsdl

网页内容为标准的xml文件内容。如下:

 <?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:axis2="http://quickstart.samples/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://quickstart.samples/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://quickstart.samples/">
  <wsdl:documentation>axis2</wsdl:documentation>
-<wsdl:types>
-<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://quickstart.samples/xsd">
-<xs:element name="testHello">
-<xs:complexType>
-<xs:sequence>
  <xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
  </xs:sequence>
  </xs:complexType>
  </xs:element>
-<xs:element name="testHelloResponse">
-<xs:complexType>
+<xs:sequence>
  <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" />
  </xs:sequence>
  </xs:complexType>
  </xs:element>
  </xs:schema>
  </wsdl:types>
-<wsdl:message name="testHelloRequest">
  <wsdl:part name="parameters" element="ns:testHello" />
  </wsdl:message>
-<wsdl:message name="testHelloResponse">
  <wsdl:part name="parameters" element="ns:testHelloResponse" />
  </wsdl:message>
-<wsdl:portType name="axis2PortType">
-<wsdl:operation name="testHello">
  <wsdl:input message="axis2:testHelloRequest" wsaw:Action="urn:testHello" />
  <wsdl:output message="axis2:testHelloResponse" wsaw:Action="urn:testHelloResponse" />
  </wsdl:operation>
  </wsdl:portType>
-<wsdl:binding name="axis2Soap11Binding" type="axis2:axis2PortType">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
-<wsdl:operation name="testHello">
  <soap:operation soapAction="urn:testHello" style="document" />
-<wsdl:input>
  <soap:body use="literal" />
  </wsdl:input>
-<wsdl:output>
  <soap:body use="literal" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
-<wsdl:binding name="axis2Soap12Binding" type="axis2:axis2PortType">
  <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
-<wsdl:operation name="testHello">
  <soap12:operation soapAction="urn:testHello" style="document" />
-<wsdl:input>
  <soap12:body use="literal" />
  </wsdl:input>
-<wsdl:output>
  <soap12:body use="literal" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
-<wsdl:binding name="axis2HttpBinding" type="axis2:axis2PortType">
  <http:binding verb="POST" />
-<wsdl:operation name="testHello">
  <http:operation location="axis2/testHello" />
-<wsdl:input>
  <mime:content type="text/xml" part="testHello" />
  </wsdl:input>
-<wsdl:output>
  <mime:content type="text/xml" part="testHello" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
-<wsdl:service name="axis2">
-<wsdl:port name="axis2HttpSoap11Endpoint" binding="axis2:axis2Soap11Binding">
  <soap:address location="http://localhost:8080/axis2/services/axis2.axis2HttpSoap11Endpoint/" />
  </wsdl:port>
-<wsdl:port name="axis2HttpSoap12Endpoint" binding="axis2:axis2Soap12Binding">
  <soap12:address location="http://localhost:8080/axis2/services/axis2.axis2HttpSoap12Endpoint/" />
  </wsdl:port>
-<wsdl:port name="axis2HttpEndpoint" binding="axis2:axis2HttpBinding">
  <http:address location="http://localhost:8080/axis2/services/axis2.axis2HttpEndpoint/" />
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>

下面新建解析这个webservices的工程。

新建工程名为client的工程。添加jar包到classpath内(和上面一样)。新建一个Util类。内容如下。

i

mport org.apache.axis.wsdl.WSDL2Java;


public class Util {


public static void main(String[] args) {
String [] s = new String[]{
"-u","http://localhost:8080/axis2/services/axis2?wsdl",
"-o", "client",
"-S", "false"
};
/*
-u是地址,就是上面点击链接生成的URL,-o是一会要输出的文件夹名字。
*/
WSDL2Java.main(s);

}
}

运行这个main函数,刷新工程,会发现在工程下多了一个client文件夹。展开client文件夹,复制samples到src下。如下图

基于axis2的webservice_第3张图片

在cn.jhb包下新建Test类。内容如下:

public class Test {


public static void main(String[] args) {
try {
//URL内的地址是刚才生成的,即上面的
- //<wsdl:port name="axis2HttpSoap11Endpoint" binding="axis2:axis2Soap11Binding">
  //<soap:address location="http://localhost:8080/axis2/services/axis2.axis2HttpSoap11Endpoint/" />
  //</wsdl:port>
- //<wsdl:port name="axis2HttpSoap12Endpoint" binding="axis2:axis2Soap12Binding">
  //<soap12:address location="http://localhost:8080/axis2/services/axis2.axis2HttpSoap12Endpoint/" />
//  </wsdl:port>
- //<wsdl:port name="axis2HttpEndpoint" binding="axis2:axis2HttpBinding">
  ///<http:address location="http://localhost:8080/axis2/services/axis2.axis2HttpEndpoint/" />
 // </wsdl:port>
//提供了三个地址,任选一个即可。
Axis2Soap12BindingStub stub = new Axis2Soap12BindingStub(new URL("http://localhost:8080/axis2/services/axis2.axis2HttpSoap12Endpoint/"), null);
String result = stub.testHello(" ni hao webservices");
System.out.println(result);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

运行这个main函数,发现在控制台输出ni hao webservices。

是不是觉得跨平台,跨项目,甚至跨语言编程不那么难了?具体细节自己找资料看吧。

你可能感兴趣的:(webservice,webservice,webservice,WebServices)