axis实现webservice服务

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




 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hao_kkkkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值