@Shooper.Java:
谢谢,我想是这样的,不过如果不在Axis2下发布就不需要拷到Webapps下了。
本人今天在MSN上看到此贴,觉得还有点意思。
如果你觉得里面讲的像是在说自己的,请举手!
难道是这里缺乏高手吗?
我想不会的,这里可是blogjava-专注于java技术的社区啊!
@happy:
我这段时间在忙项目开发,没有时间来回答你们的问题
抱歉!这个错误是MyService.aar里的配置文件写错了,请检查!
你再按我首贴的步骤试试,我测试过整个过程的,最后生成MyAxisDemo.arr
文件再发布。
再次希望,有高人路过时帮我解决一下大家的问题,不然我写这篇讨论贴
就变成我唱独角戏了,此贴也就失去了意义
再次诚心邀请有使用过AXIS2的同仁一起来参加我们的讨论!
@嘎崩豆:
这个...Java2WSDL工具有是有,不过一般不直接用,而是在Eclipse中可以用到这个功能,我没具体用过,希望遇到高人给你解答
你先下个文档看看吧:
http://ws.apache.org/axis2/download/1_0/download.cgi
下到本地接压缩后再打开这个本地路径看看(下面是目录结构)
xdocs\tools\1_0\CodegenToolReference.html
@shrimp:
你还可以看看你上楼的那篇回贴,是客户端调用Web Services的代码例子。
(即 2006-06-29 11:22 | 冰川 那篇帖子)
另外:大家还有更好的客户端调用Web Services代码例子也请贴到这边来啊!
@shrimp:
哈哈,是错了,谢谢提出来,我实现后语句有的不记得的只好考了userguide里的语句,结果出了这种BUG,哈哈哈
2.直接考过去也可以的,看你的Tomcat是什么版本,可以自动发布的就行,
我没修改前发布那段写的就是用考的后来改了,这次又要改咯!
@shrimp:
1。你就按我的首贴做就好了,我修改并测试过了的。
2。具体Call,和Options的意思和用法可以去查看你下载的发布包中的类说明文档,就在javadocs文件夹中。
3。下面是调用Web Service的客户端代码示例,大家有什么使用经验或者好的代码示例也可以写回帖共享啊!
用非阻塞、双向方式调用Web Service方法:"Echo" 的客户端程序
(本人以及Userguide都推荐使用,也是比较常用的客户端写法)
try{
OMElement payload = ClientUtil.getEchoOMElement();
Options options = new Options();
options.setTo(targetEPR); // 左边的参数:targetEPR == "http:/..."
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setUseSeparateListener(true);
options.setAction("urn:echo"); //这是我们在 service.xml 里的 Action 映射
//Callback to handle the response
Callback callback = new Callback(){
public void onComplete(AsyncResult result){
System.out.println(result.getResponseEnvelope());
}
public void onError(Exception e){
e.printStackTrace();
}
};
//非阻塞方式
sender = new ServiceClient();
sender.engageModule(new QName(Constants.MODULE_ADDRESSING));
sender.setOptions(options);
sender.sendReceiveNonBlocking(payload,callback);
//等待,直到接受到响应消息
while(!callback.isComplete()){
Thread.sleep(1000);
}
//在这里需要关闭客户端
}catch(AxisFault axisFault){
axisFault.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
finally{
try{
sender.finalizeInvoke();
}catch(AxisFault axisFault){
//此处代码省略
}
}
希望大家多多贡献关于Axis2的知识(:
@shrimp:
1. 我用的是AXIS2 1.0版
2. www.w3.org(万维网组织全球办事处)上有WSDL2.0的Reader具体网址:
http://www.w3.org/TR/wsdl20/
3. 你的错误信息说WSDL文件没有进入到META-INF文件夹,还说什么你用了其他的RPC接受信息,我也搞不懂,你试试用AXIS2另一种发布方法吧!
步骤如下:
(1)前面的操作一直到打包都按照首帖上面的做。
(2)发布时我们不把.aar文件考过去了,而是打开IE输入
http://localhost:8080/axis2进入Axis2界面(Tomcat要开启),然后点击
Administration,输入用户名:Admin 密码:Axis2登陆进去,再点击第一个
链接Upload Service,然后点浏览找到你想要发布的Web Service文件(即.aar文件),点Upload发布它!
(3)在IE输入
http://localhost:8080/axis2后点Service去确认一下吧
上帝会保佑你的,阿门~~~
大家也可以像我那样以回贴的形式,发表自己关于AXIS2的使用心得或经验以供其他人共享!
我想让急需了解AXIS2技术的人能够在一个地方得到尽可能多的有关AXIS2的知识和代码实例,这样可以节约他们的时间,给他们带来便利。
希望用过AXIS2 和 对AXIS2有一定研究的同仁们多多来这里发表经典回贴 !
以上回复中的代码由于复制过来后忘了排版,造成了阅读不方便,我很抱歉。
请大家把代码自行复制,然后排一下版再看吧
@shrimp:
关于AXIS2中客户端API同步/异步问题
同步/异步(或阻塞/非阻塞)行为是基于在web service请求的线程,同步服务将会阻塞,等待相关消息到达。另一方面,异步请求仅仅返回,等待相关消息被后台另一个不同线程执行。
同步请求很简单:请求在相关消息到达前等待,并且可以像本地过程调用一样被编码。但是异步消息的相互关系就比较复杂,客户端必须处理这种复杂性。尽管如此,通过一些额外工作来处理这种复杂情况仍是必要的。
应答式消息可以表现为以下四种方式:
1.双向In-Out 同步
2.双向In-Out 异步
3.单向In-Out 同步
4.单向In-Out 异步
下面的代码实例说明这些案例怎样被Axis2寻址,注意客户端API的四种属性怎样被使用。
1.In-Out同步,HTTP作为双向传输方式
OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, false);OMElement result = (OMElement) call.invokeBlocking( operationName.getLocalPart(), payload);
这里,SOAP消息经由同一个HTTP连接传播,地址属性没有指定,所以它们在服务器方缺省为匿名,客户端API将被锁定直到回复消息到达。
2.In-Out异步,HTTP使用HTTP作为双向传送
//this is the payload goes on the body of SOAP message OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, false);Callback callback = new Callback() { public void onComplete(AsyncResult result) { //what user can do to result } public void reportError(Exception e) { //on error }};call.invokeNonBlocking(operationName.getLocalPart(), payload, callback);
和前面相同,SOAP消息经由同一个HTTP连接传输并且不需要寻址,一旦回复消息到达客户端API不会阻塞并且回调将被执行。
3.In-Out, 异步HTTP 作为单向传输
OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);Callback callback = new Callback() { public void onComplete(AsyncResult result) { .... } public void reportError(Exception e) { ... }};call.engageModule(new Qname("addressing"));call.invokeNonBlocking(operationName.getLocalPart(), method, callback);
在这个案例中,SOAP消息通过两个HTTP连接传输,寻址是强制的,ReplyTo标题出现指示服务器端经由单独的通道发送回应。客户端没有阻塞,当回应消息到达时,唤起回调。
4.In-Out, 同步 HTTP 作为单向传送
OMElement payload = .... Call call = new Call();call.setTo(new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);OMElement result = (OMElement) call.invokeBlocking( operationName.getLocalPart(), payload);
在这种场合下使用"In-Out,异步HTTP作为单向传送"类型,在结果到达第二种连接时唤起阻塞,执行并返回结果。
总结
总而言之,web wervice消息行为建立在三种因素上:消息交互模式,客户端同步异步模式和传送行为。Asis2建立核心在不一定要任何MEP类型,不过为MEPs的广泛支持:单向和应答提供了客户端API支持,这篇文章解释Axis2消息支持概念和客户端API的使用。
@shrimp:
1.我的可以看到WSDL文件啊,你那里报了什么错吗?
2.异步传输模式我还没用到,下次去看看
3.客户端应该是监听的