Axis讨论:

yim 2004-12-23 09:50:08
Axis讨论:
本人是一位WebService的初学者,使用Apache Axis作为Web服务器,我按照Axis自带的doc以及网上的资料已经初步安装成功,并做了一两个实例而且运行成功。但在配置Axis的SOAPMonitor以及Administer Axis时遇到一些问题,希望大家能给予指导。
Axis配置过程大致如下:
变量声明:
TOMCAT_HOME:Tomcate5.5安装路径
AXIS_HOME:Axis1.2安装路径
1、下载安装jre1.5、Tomcate5.5
2、下载安装Axis1.2,步骤:
安装:首先在Tomcat中设置虚拟路径,在TOMCAT_HOME\conf路径下找到server.xml文件,在其</Host>元素前增加<Context path="/axis" docBase="F:/Apache/axis-1_2/webapps/axis" debug="1" reloadable="true"></Context>。说明:path="/axis"为虚拟路径名称、docBase="F:/Apache/axis-1_2/webapps/axis"为Axis服务物理路径(注意要用反斜杠)。重新启动Tomcat在IE中输入http://localhost:8080/axis,即可看到Axis的欢迎页面“Hello! Welcome to Apache-Axis.....”
配置Axis运行环境:将activation.jar、mail.jar、tools.jar包拷到TOMCAT_HOME\common\lib目录下(注意前两个包都可以在jbuilder的lib下找到,tools.jar必须是jdk1.5下的)。重启Tomcate在Axis的欢迎页面单击Validate连接,进入Axis运行环境检查页面,你必须保证在Needed Components下的所有包必须被找到,Optional Components下可能会有个叫xmlsec.jar包未发现,没关系(该包用处我也不知道,希望智者能指导)。如果以上都成功,你就可以在IE输入http://localhost:8080/axis/services/Version?method=getVersion、http://localhost:8080/axis/EchoHeaders.jws?method=list .等地址进行检查,看是否有错误,如果有错误请仔细检查,如果没有错误说明你已经安装成功。
以上所有的你都可以从Axis的doc或网上找到。

问题一:
使用Axis SOAP Monitor:首先你必须将AXIS_HOME\webapps\axis下的SOAPMonitorApplet.java编译,编译后就是部属该服务(编译、部属过程省略请查看Axis的文档的install.html页面的Enabling the SOAP Monitor)。重新启动Tomcate在Axis欢迎页面单击SOAPMonitor连接,进入SOAPMonitor页面,你即可看到一个Applet程序。这样你就部属Axis SOAP Monitor服务。接着在你自己部属的服务中使用Axis SOAP Monitor:以下是一个小实例:
服务类:HelloWorld.java
package axisTest.helloTest;
public class HelloWorld {
public String SayHello(String name) {
return "Hello " + name;
}

}
客户端调用类:HelloClient.java
package axisTest.helloTest;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/axis/services/HelloWorld";
String method = "SayHello";
Service service = new Service();
Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(method);

String value = (String) call.invoke(new Object[] {"Yim"});
System.out.println(value);
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
}
部署文件:Hellodeploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<requestFlow>
<handler type="soapmonitor"/>
</requestFlow>
<responseFlow>
<handler type="soapmonitor"/>
</responseFlow>
<parameter name="className" value="axisTest.helloTest.HelloWorld"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
部属后我在客户端调用HelloWorld成功,但我没在SOAP Monitor中看到请求与相应。不知道为什麽未能在SOAP Monitor中看到请求与相应???
问题二:
对于Administer Axis未能在Axis的文档中找到相关内容,所以我完全不知道如何配置???
请各位高手指导,谢谢!!!
...全文
201 点赞 收藏 13
写回复
13 条回复
yim 2004年12月31日
今天是2004年的最后一天了,不要忘记结贴哦!
呵呵 谢谢各位的知道,特别是 usabcd。谢谢你们!
祝大家在新的一年中身体健康、万事如意!
回复 点赞
yim 2004年12月28日
怎么没写完就发布了????
希望和大家一起学习一起进步!
回复 点赞
yim 2004年12月28日
真不好意思,这几天没来了!
谢谢usabcd解答,Axis自带得实例samples\faults可以运行了,但samples\userguide\example5实例运行是还是报错,错误信息如下:
Error : org.xml.sax.SAXException: Deserializing parameter 'arg1': could not find deserializer for type {urn:BeanService}Order
我通过Axis SOAPMonitor 查看请求soap发现好像请求内容有错误,里面竟然有两个SOAP的root属性,我现在也没仔细检查,等两天我在好好看看。
to:xinxing
我现在还没有自己做实例,都是运行Axis自带的实例,所以发布WSDD也就是copy他的,其实那个个WSDD也不是很难写Axis的doc中有详细的说明,还有usabcd曾经在回答一个人的提问中做了很好的解答,你可以去看看http://community.csdn.net/Expert/topic/3566/3566609.xml?temp=.8259088
这Axis好像没有象SOAP2。2的发布页面,但他提供jws、wsdd、wsdl三种发布方式也不错了。现在关键问题是Axis的深一步学习,如什麽附件、安全等等(惭愧!我还没开始)
我的QQ:8115981
回复 点赞
usabcd 2004年12月26日
我把你说的这2个都试了,没什么问题啊。
那个arg1就是你再服务端的参数名字,但是如果两边都是Java时可以忽略,不写对也没关系。
samples/faults: 看后台程序可以知道,客户端main程序带参数 #001 就算对了,如果带一个别的参数就会报一个找不到这个员工的自定义异常。这个例子向你展示了在RPC中如何使用自定义的Exception, 注意,这个Exception是从服务端抛出的自定义异常,因此很有意思。不过在实际应用中人们往往直接通过自定义的错误代码来指示各种应用级的错误情况。
回复 点赞
xinxing 2004年12月26日
支持yim() 兄弟,^_^我也刚好开始学ws,你的那个Admin Service问题解决了吗?我也只看到:
Server is running
Current load = 1
呵呵,同你感受相同,很失望!确实是这样吗?因为在soap2.2中,有基于Web的管理工具,可以发布、删除发布、显示已有soap服务,而axis的这个显示结果确实没有什么用处。
刚接触axis没几天,有几个概念没有弄清,不知yim弄懂了没有:
1、发布描述文件wsdd必须手工写吗?没有一个可视化界面提供吗?呵呵,其实感觉Admin Service应该能像soap2.2那样deploy服务的呀。
2、不知你试了soap2.2没有,它提供两种发布soap服务的方式,一种就是上面提到的web管理界面,另一种就是命令行方式,我觉得命令行方式还要自己写发布描述用的xml文件,繁琐且容易出错,那有高手用这个吗?为什么用呢?呵呵,不是白费力吗。而且基于web管理界面产生的是以ds为后缀的文件,和人工写的xml文件差异很大,soap2.2内部采用如何机制将二者协调的呢。
呵呵,偶也想将ws学好,不知能否和你携手共进,能否告知你的QQ或其他联系方式?^_^
回复 点赞
一点晴 2004年12月26日
mark
回复 点赞
yim 2004年12月25日
真希望大家帮帮我,如果分数不够我还会再加,我就是想学好Web服务!
回复 点赞
yim 2004年12月25日
谢谢usabcd的解答!
Admin Service:
我将web.xml文件中的
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
内容从注释中释放出来就在Axix的主页面的Administer Axis页面看到如下内容:
Server is running
Current load = 1
很失望,怎么就这点内容呢???不敢相信是正确的!

tcpmon:
我是这样理解的,当我们通过tcpmon配置一个监听端口时,如果客户端是通过该端口进行服务的请求时,我就可以在tcpmon该监听页面看到所有的web请求,以及相应。正如usabcd说的那样“tcpmon比SoapMonitor要详细,因为它还可以看到HTTP的消息头。”

还有我运行Axis自己带的实例samples\userguide\example5,开始一直不能发布,我将其wsdd文件中的beanMapping改成typeMapping就可以了发布成功,这点我还是没搞清楚是为什麽,我在http://community.csdn.net/Expert/topic/3566/3566609.xml?temp=.8259088看到usabcd所解释的typeMapping和beanMapping区别,我感觉example5中的bean应该是简单JavaBean,使用beanMapping就可以,但不知道为什麽不行,希望usabcd能为我解答。还有我在运行该实例的时候老是报传入参数错误,call.addParameter("arg1", qn, ParameterMode.IN);我不知道这个arg1是代表什麽意思,也希望usabcd能为我解答!

我现在真在运行samples\faults实例,但运行的是时候有个问题,好像传入的参数不正确,String[] args2 = opts.getRemainingArgs();这个参数我不知道该添什麽内容,我正在想...
回复 点赞
usabcd 2004年12月24日
Admin Service:
打开web.xml文件,enable其中注释掉的部分。

tcpmon: 是这样的,启动时设置监听端口(就是后面带个参数做端口),启动后设置目标端口和要转向的目标IP,这个目标IP就是你的Web Service发布的机器IP,可以是本机。但端口跟你启动tcpmon的不能冲突。测试时,你的客户端调用tcpmon的url, 到时tcpmon会截获http消息显示出来,然后再forward到你的目标Web Service机器。tcpmon比SoapMonitor要详细,因为它还可以看到HTTP的消息头。

你没有list出来web service说明你发布都不成功。一般tomcat的监控窗口都会有错误信息。如果你的tomcat没有监控窗口,直接看tomcat的logs目录里的文件可以看到错误信息。

回复 点赞
yim 2004年12月24日
请教大家一个问题:
我在运行Axis自带的实例中的samples\userguide\example5的例子,怎么也发布不上去,Axis也不提示如何错误!
我的wsdd文件如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="OrderProcessor" provider="java:RPC">
<parameter name="className" value="axisTest.sample.useguide.BeanService"/>
<parameter name="allowedMethods" value="processOrder"/>

<beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="axisTest.sample.useguide.Order"/>
</service>
</deployment>
我能保证所有的类路径无问题。我每次发布后都不能在View the list of deployed Web services 中看到我刚才发布的服务。
还有怎么样配置Axis的Log服务?
请大家指导,xiexie !
回复 点赞
yim 2004年12月23日
哎哟,咋没人一起来讨论咯呢?
我知道我部属的SOAP Monitor为什麽不能看到请求和相应,因为我是先部属服务再部属SOAP Monitor服务,今天下午我把所有已经发布的服务卸载了,首先再Axis上部属SOAP Monitor服务再部属其他的服务,终于再SOAP Monitor页面看到久违的请求与相应。
我真的没办法了,为了学深点,晚饭后把Axis自带的文档的User's Guide、Securing an Axis-based Web Service、Axis Ant Tasks仔细看了下,其中重点看了下User's Guide文档,我想很有收获,其中Axis几种部属服务的方法以及三种服务类型看懂了;并编译通过了TCPMon,但到底怎么监控还是没搞清楚,明天在仔细看看。但开始的第二个问题Administer Axis还是未看到文档中说明(也许是我没看到);其中Securing an Axis-based Web Service主要是介绍Web服务的安全注意事项;Axis Ant Tasks没看明白,好像是编译Axis实例吧(我对An不清楚)。明天再把Reference Material仔细看下。好了睡觉去了!
回复 点赞
yyhyan 2004年12月23日
mark.我看啊,不错,共同学习,
回复 点赞
yim 2004年12月23日
晕死,看都没人看,自己顶!
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告