前两天做一个Webservice接口工作,有位经理曾经对我说,如果你解决过一个问题,那么你以后必须成为这个领域的专家,不然等同于白做。所以在有时间的情况下,我简单做一下使用axis2作为客户端的情况下一些编码的实现内容。
首先应该部署一套服务以应对客户端调用。我要做的例子不是很麻烦,所以只需要三个接口就可以了,一个接收字符串参数,返回字符串参数。另外两个做上传和下载。一共三个接口,我已经在附件上传了一个类,这个类编译后的class文件放到下载的axis2事例工程的WEB-INF下的pojo文件夹中,pojo文件夹是自己创建的。这样就会发布一个有三个方法的接口。具体关于axis2的发布网络上内容很多,我也会在以后博客中做详细解释。为了方便我也在这里放出代码。 Java代码
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 这个是作为服务端的方法类,不能带有命名空间,方法必须为public
* 崔素强
* cuisuqiang@163.COM
*/
public class MyAxis2Service {
/*
* 请求的方法,输出接收到的参数,返回时间戳字符串
*/
public String getServiceInit(String name){
System.out.println("you name is :" + name);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(new Date());
}
// 下载图像
public byte[] dowImageWithByte() {
byte[] imageByte = null;
try {
// 下面的代码调用uploadImageWithByte方法上传图像文件
// 打开图像文件,确定图像文件的大小
java.io.File file = new java.io.File("c:\\test.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream("c:\\test.jpg");
// 创建保存要上传的图像文件内容的字节数组
imageByte = new byte[(int) file.length()];
fis.read(imageByte);
} catch (Exception e) {
return null;
} finally {
}
return imageByte;
}
// 上传图像,imageByte参数表示上传图像文件的字节
public boolean uploadImageWithByte(byte[] imageByte, int length) {
FileOutputStream fos = null;
try {
// 将上传的图像保存在D盘的test1.jpg文件中
fos = new FileOutputStream("d:\\test1.jpg");
// 开始写入图像文件的字节
fos.write(imageByte, 0, length);
fos.close();
} catch (Exception e) {
return false;
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
}
}
}
return true;
}
}
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 这个是作为服务端的方法类,不能带有命名空间,方法必须为public
* 崔素强
* cuisuqiang@163.COM
*/
public class MyAxis2Service {
/*
* 请求的方法,输出接收到的参数,返回时间戳字符串
*/
public String getServiceInit(String name){
System.out.println("you name is :" + name);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(new Date());
}
// 下载图像
public byte[] dowImageWithByte() {
byte[] imageByte = null;
try {
// 下面的代码调用uploadImageWithByte方法上传图像文件
// 打开图像文件,确定图像文件的大小
java.io.File file = new java.io.File("c:\\test.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream("c:\\test.jpg");
// 创建保存要上传的图像文件内容的字节数组
imageByte = new byte[(int) file.length()];
fis.read(imageByte);
} catch (Exception e) {
return null;
} finally {
}
return imageByte;
}
// 上传图像,imageByte参数表示上传图像文件的字节
public boolean uploadImageWithByte(byte[] imageByte, int length) {
FileOutputStream fos = null;
try {
// 将上传的图像保存在D盘的test1.jpg文件中
fos = new FileOutputStream("d:\\test1.jpg");
// 开始写入图像文件的字节
fos.write(imageByte, 0, length);
fos.close();
} catch (Exception e) {
return false;
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
}
}
}
return true;
}
}
其中要上传和下载的文件是图片,请自己事先准备好。
下面创建一个项目,将所需的JAR包加到工程中,发现有的人说如果不知道是那个包就全加进去,可是axis2的包有几十个,我也尝尽了JAR冲突的痛苦,所以我在这里告诉大家,只需要加我附件里面的几个JAR就可以了。
首先编码调用简单接口的代码,传递的参数和返回的参数都是字符串。发现网络上的例子都是RPC的,为了方便学习,我会给出两种调用方式。首先的网络上通用的方式: Java代码
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
* RPC axis2调用方式
* @author cuisuqiang
*/
public class RpcCommonClient {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
// 获得客户端
RPCServiceClient serviceClient = new RPCServiceClient();
// 可以在该对象中设置服务端的验证信息
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/MyAxis2Service");
options.setTo(targetEPR);
// 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值
QName opAddEntry = new QName("http://ws.apache.org/axis2","getServiceInit");
// 参数,如果有多个,继续往后面增加即可,不用指定参数的名称
Object[] opAddEntryArgs = new Object[] {"cuisuqiang" };
// 返回参数类型,这个和axis1有点区别
// invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;
// 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
// 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
// 当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}
// 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,
// 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同
Class[] classes = new Class[] { String.class };
System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
* RPC axis2调用方式
* @author cuisuqiang
*/
public class RpcCommonClient {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
// 获得客户端
RPCServiceClient serviceClient = new RPCServiceClient();
// 可以在该对象中设置服务端的验证信息
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/MyAxis2Service");
options.setTo(targetEPR);
// 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值
QName opAddEntry = new QName("http://ws.apache.org/axis2","getServiceInit");
// 参数,如果有多个,继续往后面增加即可,不用指定参数的名称
Object[] opAddEntryArgs = new Object[] {"cuisuqiang" };
// 返回参数类型,这个和axis1有点区别
// invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;
// 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
// 第三个参数表示
没有合适的资源?快使用搜索试试~ 我知道了~
axis2客户端编码,RPC,OMElement,上传下载实现,服务端验证
共38个文件
jar:13个
java:8个
class:8个
5星 · 超过95%的资源 需积分: 10 33 下载量 132 浏览量
2011-12-31
21:29:23
上传
评论
收藏 3.69MB ZIP 举报
温馨提示
前两天做一个Webservice接口工作,有位经理曾经对我说,如果你解决过一个问题,那么你以后必须成为这个领域的专家,不然等同于白做。所以在有时间的情况下,我简单做一下使用axis2作为客户端的情况下一些编码的实现内容。
资源推荐
资源详情
资源评论
收起资源包目录
Axis2Client2.zip (38个子文件)
Axis2Client2
.project 1KB
.mymetadata 309B
src
com
cui
AxisWebServiceClient.java 3KB
ComplexTypeMyTest.java 4KB
RpcCommonClient.java 954B
ComplexTypeRPCClient.java 3KB
servlet
MyServlet.java 858B
MyAxis2Service.java 2KB
log4j.properties 435B
ComplexTypeService.java 2KB
data
DataForm.java 378B
WebRoot
WEB-INF
classes
ComplexTypeService.class 2KB
com
cui
AxisWebServiceClient.class 3KB
RpcCommonClient.class 2KB
ComplexTypeRPCClient.class 3KB
ComplexTypeMyTest.class 4KB
servlet
MyServlet.class 1002B
MyAxis2Service.class 2KB
log4j.properties 435B
data
DataForm.class 767B
lib
XmlSchema-1.4.7.jar 145KB
axiom-dom-1.2.11.jar 155KB
wsdl4j-1.6.2.jar 145KB
axis2-kernel-1.4.1.jar 1.23MB
axis2-adb-1.4.1.jar 759KB
neethi-2.0.5.jar 33KB
backport-util-concurrent-3.1.jar 324KB
commons-logging-1.1.1.jar 59KB
axiom-api-1.2.11.jar 418KB
commons-codec.jar 46KB
commons-httpclient-3.0.jar 273KB
axiom-impl-1.2.11.jar 120KB
log4j-1.2.15.jar 383KB
web.xml 655B
index.jsp 585B
META-INF
MANIFEST.MF 39B
.myeclipse
.classpath 1KB
axis2客户端编码,RPC,OMElement,上传下载实现,服务端验证.txt 25KB
共 38 条
- 1
资源评论
- 码农不好混2012-06-29很乱,要花好久才能整理好,优化就更加麻烦了!
- daxia1862012-12-29不错的axis2资料,谢谢分享
- 幽昙2013-12-25写的比较详细, 看一下就知道怎么做的了!!谢谢分享
java小强
- 粉丝: 49
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功