axis1.4+eclipse+tomcat7.0创建简单webservice(大神绕道啊啊)

来源:互联网 发布:home软件下载 编辑:程序博客网 时间:2024/06/15 05:54

   之前接触过别人写的webservice,自己一直似懂非懂,最近花了点天时间来简单研究了下,也记个笔记来记录下,万一以后用到呢O(∩_∩)O~!

一、装备工作

      1、下载需要的jar包(包含附件中)

2、javaEE-eclipse+tomcat7.0的安装,此处就不再说了。

二、创建

1、Eclipse创建一个web工程




2、创建好web工程后将下载好的jar包拷贝到WEB-INF/lib下面,在WEB-INF目录下建立web.xml并加入axis1.4的相关配置,这个工程是一个简单的纯webservice工程,没有整合Struts、spring 等所以我将web.xml所有配置贴出来。

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app>    <!-- axis相关的配置====start====-->    <display-name>Apache-Axis</display-name>     <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>/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>  <!--   axis相关的配置====end====     -->        <mime-mapping>        <extension>inc</extension>        <mime-type>text/plain</mime-type>    </mime-mapping>   <welcome-file-list>      <welcome-file>index.html</welcome-file>      <welcome-file>/axis2-web/index.jsp</welcome-file>    </welcome-file-list>    <error-page>      <error-code>404</error-code>      <location>error404.jsp</location>    </error-page>    <error-page>        <error-code>500</error-code>        <location>error500.jsp</location>    </error-page></web-app>
3、编写服务端的业务代码,在此只编写2个简单的输出字符串的方法。包的结构如下:


SayHelloService 代码如下:

package com.test;


public interface SayHelloService 
{


public String sayHelloToMr(String info);

public String sayHelloToMiss(String info);
}

SayHelloServiceImpl 类的代码如下

package com.test;


public class SayHelloServiceImpl implements SayHelloService{


@Override
public String sayHelloToMr(String info) {
String str = "Hello Mr."+info+"!";
return str;
}


@Override
public String sayHelloToMiss(String info) {
String str = "Hello Miss."+info+"!";
return str;
}


}

4、业务代码编写好后,就开始编写创建webservice最关键的deploy.wsdd文件。在WEB-INF目录下建立deploy.wsdd,内容如下:

<?xml version="1.0" encoding="UTF-8"?><!-- Use this file to deploy some handlers/chains and services      --><!-- Two ways to do this:                                           --><!--   java org.apache.axis.client.AdminClient deploy.wsdd          --><!--      after the axis server is running                          --><!-- or                                                             --><!--   java org.apache.axis.utils.Admin client|server deploy.wsdd   --><!--      from the same directory that the Axis engine runs         --><deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  <!-- Services from mySecondWebservice WSDL service --><!-- 配置webservice的服务名称 里面的各个parameter参数含义暂时不太清楚,所以我全的配置的mySecondWebservice 嘿嘿 -->  <service name="mySecondWebservice" provider="java:RPC" style="wrapped" use="literal">      <parameter name="wsdlTargetNamespace" value="http://mySecondWebservice"/>      <parameter name="wsdlServiceElement" value="mySecondWebservice"/>      <parameter name="schemaQualified" value="http://mySecondWebservice"/>      <parameter name="wsdlServicePort" value="mySecondWebservice"/>      <parameter name="className" value="com.test.SayHelloServiceImpl"/>      <parameter name="wsdlPortType" value="mySecondWebservice"/>      <parameter name="typeMappingVersion" value="1.2"/>      <!-- service中有几个方法在此处就应该配几个operation,里面标签主要配置service中方法的入参及返回的类型,具体含义暂时还不清楚 -->      <operation xmlns:operNS="http://mySecondWebservice" xmlns:retNS="http://mySecondWebservice" xmlns:rtns="http://www.w3.org/2001/XMLSchema" name="sayHelloToMr" qname="operNS:sayHelloToMr" returnQName="retNS:sayHelloToMrReturn" returnType="rtns:string" soapAction="">        <parameter xmlns:pns="http://mySecondWebservice" xmlns:tns="http://www.w3.org/2001/XMLSchema" qname="pns:info" type="tns:string"/>      </operation>      <operation xmlns:operNS="http://mySecondWebservice" xmlns:retNS="http://mySecondWebservice" xmlns:rtns="http://www.w3.org/2001/XMLSchema" name="sayHelloToMiss" qname="operNS:sayHelloToMiss" returnQName="retNS:sayHelloToMissReturn" returnType="rtns:string" soapAction="">        <parameter xmlns:pns="http://mySecondWebservice" xmlns:tns="http://www.w3.org/2001/XMLSchema" qname="pns:info" type="tns:string"/>      </operation>      <!-- 此处配置service中可以访问的方法,中间用空格隔开 -->      <parameter name="allowedMethods" value="sayHelloToMiss sayHelloToMr"/>  </service></deployment>
5、将工程export出war包,并发布到tomcat中,发布完毕后进入工程目录secondWebservice\WEB-INF下建立发布webservice的批处理文件deploy.bat 内容如下:

set AXIS_LIB=E:\apache-tomcat-7.0.57\webapps\secondWebservice\WEB-INF\lib                                                          //这个是工程发布后axis jar 包的目录 根据自己tomcat安装位置决定(此处注释用,不要写到deploy.bat中)
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8080/secondWebservice/services/mySecondWebservice deploy.wsdd               //标红的部分就是将来访问webservice的地址(此处注释用,不要写到deploy.bat中)

6、打开cmd命令窗口 进入发布好的工程的 deploy.wsdd 文件同级目录下运行deploy.bat 文件 如果如下图:则证明发布成功了, deploy.wsdd 文件同级目录下 会新增一个 server-confg.wsdd 文件




这个一步可是最关键的一步,我也是经历了各种错误后,才找到了正确的方法,这个地方说下,为什么要先打war包,发布到tomcat中后再运行deploy.bat发布webservice ,一开始我也是按照网上的方法,在 集成在eclipse中的tomcat启动工程详,然后进入eclipse的workspace中相应的目录运行deploy.bat文件,虽然这样也能发布成功,也能访问,但是 server-confg.wsdd  这个文件不会出现 deploy.wsdd 文件 的同级目录中,而是跑到了eclipse 的tomcat插件的某个子目录中,所以我为了方便就直接打的war包,并采用这种方式发布。

发布完成后,测试下发布成功没有:

在浏览器地址中输入:http://localhost:8080/secondWebservice/services/mySecondWebservice?wsdl    出现下面页面则证明发布成功了!



接下来我们将  server-confg.wsdd 这个文件拷贝出来放到我们eclipse中工程的WEB-INF\  下,以后打war包时就会自动包含这个文件不用再生成了(当然,如果修改了webservice的名字,或者在webservice中新增了方法,需要重新发布的情况除外)。

7、服务端的部署算是完成了,接下来我们写个客户端的程序来调用下,建立一个普通的java类 代码如下(注意导入相应jar包,和上面jar的一样):

import java.net.URL;


import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;


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




public class FirstWbClient {


/**
* @param args
*/
public static void main(String[] args)
{
try {


String endPoint = "http://localhost:8080/secondWebservice/services/mySecondWebservice";
Service service = new Service();
Call call = (Call)service.createCall();
call.setOperationName(new QName(endPoint,"sayHelloToMr"));
call.setTargetEndpointAddress(new URL(endPoint));
String result = (String)call.invoke(new Object[]{"Simth"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}


}


输出  Hello Mr.Simth! 证明调用成功 如下图:




三、取消发布

此处贴出网上给出的方法,但是我一直没试成功,运行undeploy.bat 文件时老是出现 No such operation 'undeployment'  的错误,待以后解决吧!

1、在deploy.wsdd的同级目录下建立undeploy.wsdd的文件,内容如下:

<undeployment xmlns="http://xml.apache.org/axis/wsdd/">   <service name="mySecondWebservice"/>  </undeployment>

2、在deploy.wsdd的同级目录下建立undeploy.bat 的批处理文件:

set AXIS_LIB=E:\apache-tomcat-7.0.57\webapps\secondWebservice\WEB-INF\lib
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8080/secondWebservice/services/mySecondWebservice undeploy.wsdd

                                 

3、进入发布好的工程的 undeploy.wsdd 文件同级目录下运行undeploy.bat 文件,如果不报错,取消成功,并测试还是否能够访问!但就是这一步,我始终报下面的错误(还望知道或者解决的童鞋在评论中告知下,感谢!)


四、总结

真实的开发中,应该将deploy.wsdd、undeploy.wsdd以及生成的wsdlwe专门保存在工程的一个目录中,这样打war包时就会将这些文件一起打包进去,这样方便以后webservice 的发布与取消,只需要的服务器上执行相应的命令(执行bat文件)就可以了。

至于webservice的高级属性,传复杂的数据类型,就等以后再慢慢看吧!写的好累啊,我擦



最后发现 居然不能上传 附件。。。。。。!!!!!jar包参见我上传的资源吧!












0 0
原创粉丝点击