Axis服务发布与调用技术
1、用AXIS发布且部署在Tomcat下。实现了在本机和异地PC都能调用的效果
一、 具体的发布方法
1、第一步写服务代码
注意这里必须先安装AXIS才能进行发布,方法是将axis-1_4下的axis文件夹拷贝到TOMCAT下的webapps里,注意用的到的jar包有:
这里以一个简单例子说明问题
Package com.sinosoft.webservice
Public class HelloService
Public string sayHelloToPerson (String name)
{
If( name==null || name.equals(“))
{
Name = “nobody”;
}
Return “Hello”+ name;
}
2、第二步就是在TOMCAT下搭建web应用
1》打开TOMCAT,新建文件夹WS( 或者别的名字),再创建WEB-INFO(这里是固定的名字),再在WEB-INFO里创建两个文件夹:lib和classes以及一个文件 web.xml 内容是固定的:
XML为
<?xml version="1.0" encoding="UTF-8"?>
<web-app >
<display-name>Apache-Axis</display-name>
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<display-name>Axis Admin Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<display-name>SOAPMonitorService</display-name>
<servlet-class>
org.apache.axis.monitor.SOAPMonitorService
</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<!-- uncomment this if you want the admin servlet -->
<!--
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->
<session-config>
<!-- Default to 5 minute session timeouts -->
<session-timeout>5</session-timeout>
</session-config>
<!-- currently the W3C havent settled on a media type for WSDL;
http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
for now we go with the basic 'it's XML' response -->
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<welcome-file-list id="WelcomeFileList">
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jws</welcome-file>
</welcome-file-list>
</web-app>
2》然后再将所需的jar包放到lib里
2》将刚写的java类编译一下
方法如下:
用命令行的的方式:
比如:写好的XXX.java文件放到D盘里的javatest里则
命令 ->D:
D->cd javatest
Javatest-> javac HelloService
最后在WEB-INFO下的classes里建立如下结构
com
sinosoft
webservice
将XXX.class放入webservice中
测试:输入http://localhost:8080/ws/services
3、发布服务
发布Webservice需要使用现有的AdminService来实现。先写一个批处理文件,以后要是发布其他文件,则修改相应参数即可。
1》创建deploy.wsdd文件
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloServices" provider="java:RPC">
<parameter name="className" value="com.sinosoft.webservice.HelloService"/>
<parameter name="allowedMethods" value="*"/>
//*************特别注意*************************************//
若服务包含封装对象 即 Bean类 则还要增加
<typeMapping> </typeMapping>
详情请见
http://www.doc88.com/p-113616594654.html 或者
http://www.moon-soft.com/doc/36024.htm
</service>
</deployment>
注意其中红色部分HelloServices是访问地址最后的部分
http://host:port/ws/services/HelloServices?wsdl
2》创建发布webservice服务的批处理文件 deploywebservice.bat
deploywebservice.bat如下:
XML代码:
java -cp activation.jar;
axis-ant.jar;
axis-schema.jar;
axis.jar;
commons-discovery-0.2.jar;
commons-logging-1.0.4.jar;
jaxrpc.jar;
log4j-1.2.8.jar;
mailapi.jar;
saaj.jar;
wsdl4j-1.5.1.jar;
xmlsec-1.3.0.jar
org.apache.axis.client.AdminClient -lhttp://localhost:8080/ws/services/AdminService deploy.wsdd
-l后是访问的地址
最后是部署文件的文件名称
注意:这里将deploy.wsdd与deploywebservice.bat文件放到lib里面,运行批处理文件即可。
3》最后一步:在WEB-INFO下建立 server-config.wsdd中将deploy.wsdd文件中的<service name=” ”>部分拷贝过去。
server-config.wsdd内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="E:\MyWork\MOSS\moss\itc-lab-moss\WEB-INF\attachments"/>
<parameter name="axis.servicesPath" value="/mossWS/"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler">
<parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/>
<parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
<parameter name="serviceName" value="SOAPMonitorService"/>
<parameter name="portName" value="Demo"/>
</handler>
<service name="HelloServices" provider="java:RPC">
<parameter name="className" value="com.sinosoft.webservice.HelloService"/>
<parameter name="allowedMethods" value="*"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
最后注意文件中的蓝色字体即是deploy.wsdd中的内容