1、创建web project项目
2、向项目中导入jar包,具体的有【activation.jar】、【axis-ant.jar】、【axis.jar】、【commons-discovery-0.2.jar】、【commons-logging-1.0.4.jar】、【jaxrpc.jar】、【log4j-1.2.8.jar】、【mailapi_1_3_1.jar】、【saaj.jar】、【wsdl4j-1.5.1.jar】、【xml-apis-2.6.2.jar】、【xmlsec-1.4.2.jar】,这些包是不是必须都要,我没有做过实验,如果大家有兴趣可以自己做一下实验,看一下哪些包是必须要有的,哪些包可以不要。在文章的最后,我会把这些包打包传上来,供大家使用!
3、配置web.xml文件
</pre><p><pre class="java" name="code"><servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<url-pattern>/services/*</url-pattern>这个写法不是唯一的,可以根据自己的喜好来写
4、编写服务端代码
服务端代码比较简单,创建一个接口和一个实现类即可。
4.1项目截图
4.2项目代码
服务端接口代码:
package server;
import model.User;
public interface SayHello {
public String getName(String name);
public User getUser(User user);
}
服务端实现类代码:
package server.impl;
import javax.jws.WebService;
import model.User;
import server.SayHello;
@WebService(endpointInterface = "server.SayHello",serviceName="SayHello")
public class SayHelloImpl implements SayHello {
public String getName(String name) {
return "hello====>" + name;
}
public User getUser(User user) {
return user;
}
}
到此服务端完成
5、在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="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"/>
</globalConfiguration>
<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
//此为传普通参数的接口
<service name="SayHello" provider="java:RPC">
<parameter name="className" value="server.impl.SayHelloImpl"/>
<parameter name="scope" value="request"/>
<parameter name="allowedMethods" value="*"/>
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</service>
//此为传对象参数的接口
<service name="TestModel" provider="java:RPC">
<parameter name="className" value="server.impl.SayHelloImpl"/>
<parameter name="scope" value="request"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping languageSpecificType= "java:model.User" qname= "ns1:User" xmlns:ns1= "http://model" />//传对象的接口比普通参数接口多了这一句,其中xmlns:ns1这一项为命名空间,每个人的项目可能会不一样,这里不要照抄
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
到此为止就可以启动项目查看服务端提供的接口了,访问地址如下:
<a target=_blank href="http://127.0.0.1:8081/webService/services/SayHello?wsdl">http://127.0.0.1:8081/webService/services/SayHello?wsdl</a> //普通参数接口
<a target=_blank href="http://127.0.0.1:8081/webService/services/TestModel?wsdl">http://127.0.0.1:8081/webService/services/TestModel?wsdl</a> //对象参数接口
6、编写客户端代码
客户端代码有两种写法,一种是自动生成客户端代码文件,另一种是手工编写客户端代码
6.1、手工编写客户端代码
package client;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestClient {
public static void main(String[] args) throws Exception {
// 指出service所在URL
String endpoint = "http://127.0.0.1:8081/webService/services/SayHello";
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call) service.createCall();// 通过service创建call对象
// 设置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
// 方法名(getName)与SayHello.java方法名保持一致
call.setOperationName("getName");
// Object 数组封装了参数,参数为"This is Test!",调用getName(String arg)
String ret = (String) call.invoke(new Object[] { "world"});
System.out.println(ret);
}
}
手工编写代码只写了普通参数的代码,另外一个类似,在这里就不写了
6.2自动生成客户端代码文件
将下载后的jar包放到一个文件夹内,然后在某个地方创建一个.bat后缀的文件,文件内容如下
set Axis_Lib=D:\axis_maker\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\axis_maker\outPut
echo 生成第一个服务客户端
@pause
set wsdl_path=http://localhost:8081/MyWebService/services/TestThreeService?wsdl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -s -w -p com.client.clientThree -S true -o%Output_Path% %wsdl_path%
以上为文件的内容,我来逐条解释一下
第一句是设定jar包的目录,我的jar包在我本地放到了D:\axis_maker\axis-1_4\lib这个路径下
第二句是设定Java的命令语句
第三句是设定生成代码文件的保存目录,生成的代码都会保存到D:\axis_maker\outPut这个路径下
第四句和第五句不用管
第六句是设定接口访问地址
第七句是具体的命令,全靠这句来生成客户端文件,其中%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -s -w -p这一些是固定的,com.client.clientThree这一段是自己项目的包路径,就是你生成完了之后直接将代码放到项目的com.client.clientThree路径下就不会报错,如果放到其他路径下就需要修改生成代码里的路径,所以这个一定要是你要把代码放入的项目路径,剩下的-S true -o%Output_Path% %wsdl_path%这一段不可修改
这个.bat后缀的文件创建好之后,双击这个文件,然后就会在指定的目录下生成代码,将生成的代码放到项目中的指定目录下即可。
6.3自动生成客户端代码的调用
package ws.ws1;
import model.User;
public class TestOne {
public static void main(String[] args){
try{
SayHelloImplService temp = new SayHelloImplServiceLocator();
TestModelSoapBindingStub stub = (TestModelSoapBindingStub) temp.getTestModel();
User user = new User();
user.setAge(99);
user.setHeight(183);
user.setName("gmy");
user.setSex(1);
user.setWeight(81);
User tValue = stub.getUser(user);
System.out.println("-----------------------"+tValue.getName()+"-----------------------");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
这个是对象参数接口的调用代码,普通参数一样,参考这个就好了
到此为止,服务端和客户端就全完成了,最后在tomcat上发布项目,并运行测试类就可以看到结果了。
最后我把整个项目附上,里边包含所有的jar包
好吧我不知道在哪里上传文件,我待会传到csdn资源库吧,待会附上链接,有需要的直接去那里下载
链接在此:http://download.csdn.net/detail/hao_kkkkk/9322445