文件管理 · 2022年9月8日

axis2传输文件|Axis2的具体使用

㈠ axis2-1.6.2 mole 如何转发当前接口方法到另一个接口方法

将bin包和war包解压,

在项目里新建一个测试类,代码如下:

package com.zl.test;

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.rpc.client.RPCServiceClient;

public class CallAxis2 {

@SuppressWarnings("unchecked")

public static void main(String[] args) {

try {

//调用webservice

RPCServiceClient serviceClient = new RPCServiceClient();

org.apache.axis2.client.Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference(

"http://192.168.99.152:8080/testAxis2/services/HelloService");//接口地址

options.setTo(targetEPR);

QName opGetWeather = new QName("http://ws.apache.org/axis2", "sayHelloToName");//命名空间、接口方法

String str="美女";

Object[] opGetWeatherArgs = new Object[] {str};//请求文

Class[] returnTypes = new Class[] { String.class };

Object[] response = serviceClient.invokeBlocking(opGetWeather,opGetWeatherArgs, returnTypes);

String result = (String) response[0];//返回结果

System.out.println(result);

} catch (Exception e) {

e.printStackTrace();

}

}

}

运行后控制台会输出:hello 美女。说明接口调用成功。

㈡ 问个比较弱的问题,我刚接触webservice ,axis和axis2 有什么区别啊

Axis全称Apache eXtensible Interaction System,是apache组织下的一个开源项目,用来做webservice开发的,有java版的实现,也有c++版的实现,其前身最早是IBM的SOAP4J,后来捐给Apache后改名Apache SOAP,也就是支持SOAP1.1的那个版本,到现在的AXIS已经是第三代了,AXIS对Apache SOAP的改进有很多,比如用SAX代替以前的DOM,增加对WSDL的支持,支持SOAP1.2等等使用axis很easy,在apache网站上把axis下载了后(最新版本1.2.1),把%AXIS_HOME%\webapps\axis整个目录到tomcat的webapps目录下面,启动tomcat,浏览器中输入http://localhost:8080/axis就可以了上面说的只是axis运行起来了,要想布置自己的webservice,axis支持两种方法:一种是用JWS(Java Web Service),好处是只要有源码比如说Hello.java,把他改成Hello.jws后放到%TOMCAT_HOME%\webapps\axis目录下面就搞定,浏览器里面输入http://localhost:8080/axis/Hello.jws就可以了,不足的地方是能配置的地方有限(比如说Hello.java里面的所有public非static方法都会暴露),很多东西没办法弄;第二种方法就是使用wsdd(web service deploy description),这个就是在TOMCAT_HOME%\webapps\axis\WEB-INF目录下写一个deploy.wsdd和undeploy.wsdd文件,然后通过java org.apache.axis.client.AdminClient deploy.wsdd就搞定了,卸载这个webservice就用org.apache.axis.client.AdminClient undeploy.wsdd,客户端输入http://localhost:8080/axis/services/Hello就可以了介绍了部署webservice的两种方法后,下面说说客户端的访问方式,也有两种,一种是通过axis实现的java里面的JAX-RPC进行动态调用,另外一种就是通过服务器端产生的wsdl文件利用WSDL2Java工具生成Client Stub后访问。通过JAX-RPC的比较简单,需要提供的有SOAP router URL,service namespace,operation name,operation parameter types,operation return types,看看下面这个例子就明白了: public SOAPWrapper() { String location = "http://localhost:8080/axis/services/BookService"; try { Service service = new Service(); call = (Call)service.createCall(); call.setTargetEndpointAddress(new url(/location)); } catch (Throwable t) { handleError("SOAPWrapper (constructor) had an Exception.",t); } } public void create(Book book) { try { call.removeAllParameters(); call.setOperationName("create"); call.addParameter("arg1",qn,ParameterMode.IN); call.setReturnType(XMLType.AXIS_VOID); call.invoke(new Object[] {book}); return; } catch (Throwable t) { handleError("SOAPWrapper (create) had an Exception.",t); return; } }程序中的Call和Service是对JAX-RPC中Call和Service的具体实现:org.apache.axis.client.Call implements javax.xml.rpc.Call,org.apache.axis.client.Service implements javax.xml.rpc.Service第二种客户端的方法就是利用WSDL2Java产生Client stub后通过stub调用,WSDL2Java的操作对象是service所对应的wsdl文件,这个文件怎么产生呢?一种方法前面是由axis自动产生,如前面服务器端的配置所说,无论通过jws或是wsdd的方式,axis都会产生相应的wsdl;还有一种方式就是利用Java2WSDL对java源文件进行操作也可以产生相应的wsdl文件。

㈢ Axis2的方式比较

其中前面两种都是从基本的代码开始写起的.后面三种是从WSDL生成代码框架.Deploying POJOs(Plain Old Java Objects)JavaBean类需满足JavaBean规范,如采用标准的setter/getter方法设置成员变量.POJO只是普通的java类.可以认为,JavaBean类都是是POJO,但POJO类未必是JavaBean!Building the service using AXIOM需要我们在代码中,获取XML利用STAX进行获取相关返回值,和创建消息等.是一个比较底层的创建方式.比POJOS复杂.SAX实际上是定义了一个拉式(pull)的xml解析器。 一般的解析xml是通过DOM或SAX形式。DOM的问题是需要一次性读入整个XML,对于大型的xml效率低。STAX是基于事件, 当读取到文档的某个位置会触发到某个事件。而这个读取过程是不受控的, 就是必须一次读完(对这个不熟悉)。这就是所谓推(push)式的。即把整个文件推给client。STAX也是类似于SAX的事件,但是是由client的next()来控制指针的前进, 是把文件的内容pull出来的。这大大增强了客户端的控制能力,例如写入和修改节点。SAX:Simple API for XMLStAX(Streaming API for XML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。STAX是一个用Java实现的XML拉式解析器Generating the service using ADB(Axis2 Databinding Framework )Generating the service using XMLBeansXMLBean是Apache的一个开源项目,以如果有一个类似的工具能够实现将对XML的读写转成对JavaBean的操作,将会简化XML的读写,即使对XML不熟悉的开发人员也能方便地读写XML. 这个工具就是XMLBean.Generating the service using JiBX (JiBJiBX是一个为Java提供的XML数据绑定框架。它可以和现存的类一起运行,使用一个灵活的映射定义文件来决定如何将数据对象转换成XML

㈣ axis2问题,axis2 omelement对象怎么传递数组参数

Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。Apache Axis2 是Axis的后续版本,是新一代的SOAP引擎。主要特点1)采用名为 AXIOM(AXIs Object Model)的新核心 XML 处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。2)支持不同的消息交换模式。目前Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。3)提供阻塞和非阻塞客户端 API。4)支持内置的 Web服务寻址 (WS-Addressing) 。5)灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。6)新的部署模型,支持热部署。7)支持HTTP,SMTP,JMS,TCP传输协议。8)支持REST (Representational State Transfer)。编辑本段方式比较其中前面两种都是从基本的代码开始写起的.后面三种是从WSDL生成代码框架.Deploying POJOs(Plain Old Java Objects)JavaBean类需满足JavaBean规范,如采用标准的setter/getter方法设置成员变量.POJO只是普通的java类.可以认为,JavaBean类都是是POJO,但POJO类未必是JavaBean!Building the service using AXIOM需要我们在代码中,获取XML利用STAX进行获取相关返回值,和创建消息等.是一个比较底层的创建方式.比POJOS复杂.SAX实际上是定义了一个拉式(pull)的xml解析器。 一般的解析xml是通过DOM或SAX形式。DOM的问题是需要一次性读入整个XML,对于大型的xml效率低。STAX是基于事件, 当读取到文档的某个位置会触发到某个事件。而这个读取过程是不受控的, 就是必须一次读完(对这个不熟悉)。这就是所谓推(push)式的。即把整个文件推给client。STAX也是类似于SAX的事件,但是是由client的next()来控制指针的前进, 是把文件的内容pull出来的。这大大增强了客户端的控制能力,例如写入和修改节点。SAX:Simple API for XMLStAX(Streaming API for XML)是标准的XML处理API,它能够从应用程序的stream对象解析XML数据或把XML数据转换成stream对象。STAX是一个用Java实现的XML拉式解析器

㈤ Axis2的具体使用

为了搞个Web Services,让我真是煞费苦心.还好最后用到了axis,在axis上发布Web Services是一件很轻松的事情.甚至不做配置的情况下都可以采用即时发布.就象jsP的发布安装axis需要Servlet容器,我用的是Tomcat-5.0.28,下载Tomcat和axis我就不说了,下载后将axis解压后,将axis文件夹考到Tomcat的webapps下.设置环境变量是非常重要的,设置环境变量:AXISCLASSPATH为:%AXIS_LIB%axis.jar;%AXIS_LIB%commons-discovery-0.2.jar;%AXIS_LIB%commons-logging-1.0.4.jar;%AXIS_LIB%jaxrpc.jar;%AXIS_LIB%saaj.jar;%AXIS_LIB%log4j-1.2.8.jar;%AXIS_LIB%wsdl4j-1.5.1.jar;%AXIS_LIB%xml-apis.jar;%AXIS_LIB%xercesImpl.jar设置AXIS_LIB为随便一个文件夹,将上面的一堆jar包搞进去.再将activation.jar, mail.jar, wsdl4j-1.5.1.jar搞到 %CATALINA_HOME%commonlib下.若启动Tomcat后在浏览器输入:http://localhost:8080/axis/happyaxis.jsp,若Needed Components都加载了就说明正常启动了axis.axis支持两种发布方式:(先启动Tomcat)1.即时发布:直接使用java语言编辑.jws文件,将它放到axis目录下.实例:用文本编辑器编写HelloWorld.jws public class HelloWorld{ public String helloWorld(){ System.out.println("Hello World!"); return "Hello World!"; }}拷贝到axis下,在浏览器中输入:http://localhost:8080/axis/HelloWorld.jws?wsdl,若显示出相应的描述,说明发布成功,一般不会失败的,除非axis本身有问题.2.定制发布:将编译完的.class文件放到axisWEB-INF,要包含包的文件夹.然后编写.wsdd文件,用org.apache.axis.client.AdminClient来发布实例:编写并编译文件Capacity.java.package samples.capacity;public class Capacity{ public double convertGallon2Litre(double gallon,String user){ if("Andy".equals(user)) return gallon * 4.546; else return 0.0d; }}将Capacity.class文件拷贝到axisWEB-INFclasses下(带着文件夹拷),编写deploy.wsdd文件<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="Capacity" provider="java:RPC"> <parameter name="className" value="samples.capacity.Capacity"/> <parameter name="allowedMethods" value="*"/> </service></deployment>拷到Capacity.class所在的目录,在控制台切换到该目录执行:java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd显示如下信息说明发布完毕:Processing file deploy.wsdd<Admin>Doneprocessing</Admin>在浏览器输入http://localhost:8080/axis/services/Capacity?wsdl,若显示描述,则说明发布成功.(好象要等一段时间才)调用Web Services:编写AXISTest.java文件:package axisexercise;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType;import javax.xml.rpc.ParameterMode;public class AXISTest{ public static void main(String[] args) throws Exception{ Service service = new Service(); Call call = ( Call ) service.createCall(); //////////访问即时发布的Distance服务 //设置访问点 call.setTargetEndpointAddress("http://localhost:8080/axis/Distance.jws"); //设置操作名 call.setOperationName("convertMile2Kilometre"); //设置入口参数 call.addParameter("op1",XMLType.XSD_DOUBLE,ParameterMode.IN); call.setReturnType( XMLType.XSD_DOUBLE ); Double d1 = new Double( 190 ); //调用服务 System.out.println(d1 + " 英里相当于 " + call.invoke(new Object[] {d1}) + " 公里!"); //////////访问定制发布的Capacity服务 call = ( Call ) service.createCall(); //设置访问点 call.setTargetEndpointAddress("http://localhost:8080/axis/services/Capacity"); //设置操作名 call.setOperationName("convertGallon2Litre"); //设置入口参数 call.addParameter("op1",XMLType.XSD_DOUBLE,ParameterMode.IN); call.addParameter("op2",XMLType.XSD_STRING,ParameterMode.IN); call.setReturnType( XMLType.XSD_DOUBLE ); d1 = new Double( 10.00 ); String str1 = "ss"; //调用服务 System.out.println(d1 + " 加仑相当于 " + call.invoke( new Object[] {d1,str1} ) + " 升!"); }}编译:javac -classpath .;%AXISCLASSPATH% AXISTest.java执行:java -classpath .;%CATALINA_HOME%commonlibwsdl4j-1.5.1.jar;%AXISCLASSPATH% axisexercise.AXISTest显示如下结果:log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).log4j:WARN Please initialize the log4j system properly.190.0 英里相当于 305.71 公里!10.0 加仑相当于 0.0 升!若将AXISTest.java中的str1改为Andy,则接过就是45.46升

㈥ axis2请求webservice,服务段接受参数为null

WebService是基于SOAP的,SOAP又是基于XML的,XML是基于文本的 所以WebService里面传输的参数要是基本类型的或者基本类型的组合,或者可序列化的。不要传Object,没有意义。