AXIS使用笔记
发布时间:2014-09-25 21:47:03
发布时间:2014-09-25 21:47:03
新建web工程websaxis2,在src下建立目录com.axis,导入axis的所有的jar
工程目录总览
A) 建立包com.axis,新建类ISayHi.java
package com.axis;
public interface ISayHi {
String sayHi(String name);
}
B) 修改web.xml
<listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListenerlistener-class>
listener>
<servlet>
<servlet-name>AdminServletservlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServletservlet-class>
<load-on-startup>1load-on-startup>
servlet>
<servlet>
<servlet-name>AxisServletservlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServletservlet-class>
<load-on-startup>2load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>AxisServletservlet-name>
<url-pattern>/servlet/AxisServleturl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServletservlet-name>
<url-pattern>*.jwsurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServletservlet-name>
<url-pattern>/services/*url-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServletservlet-name>
<url-pattern>/servlet/AdminServleturl-pattern>
servlet-mapping>
C)web-inf下添加文件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="D:\tomcat5.0.28\webapps\axis\WEB-INF\attachments"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<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="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/namespace>
<namespace>http://xml.apache.org/axis/wsdd/namespace>
<namespace>http://xml.apache.org/axis/wsdd/namespace>
service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
service>
<service name="asyncService" provider="java:MSG">
<parameter name="allowedMethods" value="process"/>
<parameter name="className" value="org.apache.axis.wsa.AsyncService"/>
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>
D)然后开始生产服务器端代码
在myeclipse中按下快捷键crtl+shift+t,输入java2wsdl,一定看好是你自己项目下的axis的jar包,
然后右键Debug as -> java aplientaction,你会看到控制台输出一大堆东西
然后右键Debug as -> open Debug Dialog
然后选择第二个选项卡arguments
在第一个框中输入
-l "http://10.10.156.238:8080/websaxis2/services/ISayHi"
-o service.wsdl com.axis.ISayHi
点击debug
语句解析:-l "http://10.10.156.238:8080/websaxis2/services/ISayHi"
Ip:8080/项目名字/web.xml中配置的名字/接口名
<servlet-mapping>
<servlet-name>AxisServletservlet-name>
<url-pattern>/services/*url-pattern>
servlet-mapping>
-o service.wsdl com.axis.ISayHi
-o 生成的wsdl的名字 针对哪个接口生成wsdl
这是刷新项目,就会看到多出一个文件service.wsdl
E)在myeclipse中按下快捷键crtl+shift+t,输入wsdl2java,一定看好是你自己项 目下的axis的jar包(和上面的步骤一样)
在框中输入
-p com.axis.service
--server-side --skeletonDeploy true service.wsdl
-p 生成的目录名
--server-side --skeletonDeploy true 根据哪个wsdl文件生成
刷新你会看到多出这么多文件
打开deploy.wssdd
你会看到里面有这么一段
<service name="ISayHi" provider="java:RPC" style="rpc" use="encoded">
<parameter name="wsdlTargetNamespace" value="http://axis.com"/>
<parameter name="wsdlServiceElement" value="ISayHiService"/>
<parameter name="wsdlServicePort" value="ISayHi"/>
<parameter name="className" value="com.axis.service.ISayHiSoapBindingSkeleton"/>
<parameter name="wsdlPortType" value="ISayHi"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="allowedMethods" value="*"/>
service>
每一个接口生成的不一样
接下来把这段文件拷贝到server-config.wsdd
中去。
然后打开ISayHiSoapBindingImpl.java
在里面完成你的实现类
到此服务器端编写完成了,发布到tomcat上去,启动,在浏览器中输入
Ok,服务端成功了
A) 在myeclipse中按下快捷键crtl+shift+t,输入wsdl2java,一定看好是你自己项 目下的axis的jar包
在里面输入
-p com.axis.client service.wsdl
-p 生成的目录名 根据哪个wsdl生成文件
你会看到生成了
然后新建一个类,这个类
我这里建的名字叫ISayHiClient.java
package com.axis.client;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ISayHiClient {
protected transient static Log logger = LogFactory.getLog(ISayHiClient.class);
private static ISayHiClient client = null;
private ISayHiServiceLocator service = null;
public ISayHiClient() {
service = new ISayHiServiceLocator();
}
public static ISayHiClient getInstance() throws Exception {
if (null == client) {
synchronized (ISayHiClient.class) {
if (null == client)
client = new ISayHiClient();
}
}
return client;
}
public ISayHiServiceLocator getService() {
if(service==null)
service=new ISayHiServiceLocator();
return service;
}
public ISayHi_PortType getPortType() throws Exception {
//URL portAddress = WsUtil.getUrlAddress(WS_CLIENT_CODE);
return getService().getISayHi();
}
}
到此客户端也建完了
测试:
新建文件夹com.axis.test
新建类:ClientTest
package com.axis.test;
import java.rmi.RemoteException;
import com.axis.client.ISayHiClient;
public class ClientTest {
public static void main(String[] s) throws RemoteException, Exception{
String str = ISayHiClient.getInstance().getPortType().sayHi("wlm");
System.out.print(str);
}
}
运行这个类,你会看到