加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Axis2 WebService的发布和调用说明

发布时间:2020-12-17 00:58:54 所属栏目:安全 来源:网络整理
导读:准备工作 1 、下载: axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip 下载地址: http://axis.apache.org/axis2/java/core/ 2 、环境变量设置 AXIS2_HOME E:researchaxis2-1.5.4-binaxis2-1.5.4 JAVA_HOME C:Program FilesJavajdk1.6.0_21 3 、 axis2-1.5.4

准备工作

1、下载:axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip 下载地址:http://axis.apache.org/axis2/java/core/
2、环境变量设置
AXIS2_HOME E:researchaxis2-1.5.4-binaxis2-1.5.4
JAVA_HOME C:Program FilesJavajdk1.6.0_21
3
axis2-1.5.4-war.zip解压,将压缩包内的axis2.war部署到%TOMCAT-HOME%/webapps下,启动tomcat,访问http://localhost:8085/axis2/看是否正常。

ServiceService列表面,当前只有一个Versionhttp://localhost:8085/axis2/services/Version?wsdl
4
、下EclipseAxis2插件: axis2-eclipse-codegen-plugin-1.5.4.zip,axis2-eclipse-service-plugin-1.5.4.zip? 后将plugins 复制到%ECLIPSE_HOME%plugins
http://www.apache.org/dyn/mirrors/mirrors.cgi/axis/axis2/java/core/1.5.4/axis2-eclipse-codegen-plugin-1.5.4.zip
http://www.apache.org/dyn/mirrors/mirrors.cgi/axis/axis2/java/core/1.5.4/axis2-eclipse-service-plugin-1.5.4.zip

安装完插件后,IDE选择new->other中看到“Axis2 Wizards”,说明插件已经安装成功了。

?

AXIS2Web Services?
一、工程文件

1、新建名称为Axis2Service1 java工程。
2
、新建 Axis2Service1srcwsTestWs.java

package ws;
public class TestWs {
 public String showName(String name) {return name; }
 public String getName() {return "Axis2Service Sample"; }  
}


?

二、arr部署方式
1
、手打包
新建Axis2Service1deploy文件,将Axis2Service1bin下的class文件复制来。
新建Axis2Service1deployMETA-INFservices.xml文件

<service name="AxisService">
 <description>AxisService</description>
 <parameter name="ServiceClass">ws.TestWs</parameter>
 <operation name="showName">
  <messageReceiver
   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 </operation>
 <operation name="getName">
  <messageReceiver
   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 </operation>
</service>


?

生成aar Axis2Service1deploy>jar cvf AxisService.aar . (注意.)

2、插件打包
IDE
选择New->other->Axis2 Service Archiver,Next;
Class File Location:
选择Axis2Service1bin,Next;
Skip WSDL,Next;
Service Archiver
选择jar位置,如果没有jar包就直接点Next;
Generate the service xml automatically 生成service.xml file文件,Next
service name,
:AxisService,然后在class name 中填写要布的(全路径,如:ws.TestWs),load。勾 Search declared methods only。点next

output File location,:D: ; output File Name,artiver文件的名称 AxisService。点finish
提示 Service Archvie generated successfully! 注册表明,生成成功。


3
AxisService
AxisService.aar
复制到%TOMCAT-HOME%/webapps/axis2/WEB-INF/services下。(不打aar包,Axis2Service1deploy下面复制去也是可以)

打开http://localhost:8085/axis2/services/listServices 就可以看到刚才发布的AxisService服务了,下面有两个函数:showName,getName

?

三、独立部署

1、新建java web project工程。
2
、文件复制
%TOMCAT-HOME%webappsaxis2WEB-INFlib
复制到 Axis2Service2WebRootWEB-INFlib 下,并加入工程引用。
%TOMCAT-HOME%webappsaxis2WEB-INFconf
复制到 Axis2Service2WebRootWEB-INFconf?
%TOMCAT-HOME%webappsaxis2WEB-INFmodules
复制到 Axis2Service2WebRootWEB-INFmodules


3
web.xml 如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <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>
</web-app>


?

2、新建 Axis2Service2srcwsTestWs.java

package ws;
public class TestWs {
 public String showName(String name) {return name; }
 public String getName() {return "Axis2Service Sample"; }  
}


3、新建Axis2Service2WebRootWEB-INFservices
4
、新建一个AxisService
AxisServiceMETA-INFservices.xml

<service name="AxisService">
 <description>AxisService</description>
 <parameter name="ServiceClass">ws.TestWs</parameter>
 <operation name="showName">
  <messageReceiver
   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 </operation>
 <operation name="getName">
  <messageReceiver
   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 </operation>
</service>


?

tomcat后,访问http://localhost:8085/Axis2Service2/services/AxisService?wsdl看是否正常。

?AXIS2Web Services

一、客stub文件生成
1
、脚本生成方式
AXIS2的解bin(%AXIS2_HOME%bin)行下面
wsdl2java -uri http://localhost:8085/Axis2Service2/services/AxisService?wsdl -p ws -s -o stub
-p
参数指定了生成的Java的包名
-o
参数指定了生成的一系列文件保存的根目
stubsrcws生成AxisServiceStub.java

2、插件生成方式
IDE
选择New->other->Axis2 Code Generator,Next;
Generate Java source code from a WSDL file,Next;
WSDL file location,
:http://localhost:8085/Axis2Service2/services/AxisService?wsdl,Next;
如果路径不会提示:Specified WSDL is invalid!,Please select a validated *.wsdl/*.xml file on previous page.
正确的,点next;

指定入路径,Next

提示:All operations completed successfully! 生成成功。在D:srcws 生成了stub一系列文件,其中ws是包名。

上面2种方式生成的stub有点不一,脚本生成方式是文件,插件生成方式生成的一系列文件。

二、客
脚本生成方式例子,插件生成的似。

1、新建 java工程 Axis2Client
新建Axis2Clientlib文件
%AXIS2_HOME%lib 下的所有jar包复制到Axis2Clientlib,并加入工程引用中
将通脚本生成的AxisServiceStub.java文件加入到srcws


2
、新建test.TestWs.java 主要代如下

?

//初始化Sub类
AxisServiceStub stub = new AxisServiceStub();
//传递AxisServiceStub.ShowName对象,相关参数在这边赋值。
AxisServiceStub.ShowName command = new AxisServiceStub.ShowName();
command.setName("Hello!");
//取得返回值
String name = stub.showName(command).get_return();
System.out.println(name);


?

?

用成功后控制台出:Hello!

?

?AXIS2REST Web Services

使用http://localhost:8086/Axis2Rest/services/AxisService/showName?name=rest的方式访问刚才发布成功的WebService从上面可以看出个就是restAxis1.0是无法通showName?name=rest取信息的。

2、使用axis

public class TestRest {
 
    private static String toEpr = "http://localhost:8086/Axis2Rest/services/AxisService";
   
    public static void main(String[] args) throws AxisFault {
        Options options = new Options();
        options.setTo(new EndpointReference(toEpr));
       
        //客户端REST方式调用服务跟普通服务的区别,REST调用必须加上下面这个代码。
        options.setProperty(Constants.Configuration.ENABLE_REST,Constants.VALUE_TRUE);
        ServiceClient sender = new ServiceClient();
        //axis2-1.5.4不需要下面这句代码,否则会报错
        //sender.engageModule(new QName(Constants.MODULE_ADDRESSING));
        sender.setOptions(options);
        OMElement result = sender.sendReceive(getPayload());
        try {
            XMLStreamWriter writer = XMLOutputFactory.newInstance()
                    .createXMLStreamWriter(System.out);
            result.serialize(writer);
            writer.flush();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        } catch (FactoryConfigurationError e) {
            e.printStackTrace();
        }
    }
    private static OMElement getPayload() {
        OMFactory fac = OMAbstractFactory.getOMFactory();
        OMNamespace omNs = fac.createOMNamespace(
                "http://ws","example1");
        OMElement method = fac.createOMElement("showName",omNs);
        OMElement value = fac.createOMElement("name",omNs);
        value.addChild(fac.createOMText(value,"Rest"));
        method.addChild(value);
        return method;
    }


?

明:
1
sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); axis2-1.5.4不需要下面句代,否报错

2、客REST方式用服跟普通服的区,就是Rest有下面个代
options.setProperty(Constants.Configuration.ENABLE_REST,Constants.VALUE_TRUE);
两者返回的数据都是

<ns:showNameResponse xmlns:ns="Resthttp://ws"><ns:return>Rest</ns:return></ns:showNameResponse>


?

3getPayload方法

OMNamespace omNs = fac.createOMNamespace("http://ws","example1"); 指定命名空,如果没如下错误<faultstring>namespace mismatch require http://ws found http://ws1</faultstring>

OMElement method = fac.createOMElement("showName",omNs); 传递的方法名 "showName"

OMElement value = fac.createOMElement("name",omNs); 传递的参数name

value.addChild(fac.createOMText(value,"Rest"));? 传递参数name值为Rest

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读