在java项目中配置web service服务

从网上的海量数据里游了这么长时间,终于完成了在java里配置web service的小任务!现在将这个小过程发布于此!

我使用的编程环境是eclipse+tomcat

第一步,像所有的网上说的那样,配置axis! 

配置axis:就我自己的这个配置过程来讲,网上有些同僚的方法真是太烦琐了,web service的确很简单,但是为什么就没有人能简单的说明问题呢!真是可惜!但是总有好人的表达能力不错哦,我就是得意于此,在此感谢网上的发布信息的同僚了!所以在此推荐其中一个比较好的关于配置方面的blog:http://blog.csdn.net/lixinye0123/archive/2006/05/25/755017.aspx

照此方法进行测试!应该是可以成功的!我就是这么配置的!(还有个问题,这个问题不是程序问题,而是你在测试的时候可能会用emeditor这个工具写测试用例,这个文本编辑器在保存的时候会加入一个bom signiture,让我们的代码不能运行,真是烦死了,我被浪费了很长时间!各位多多注意!)

第二步,在自己的项目中配置axis:像上面那样测试通过之后,只是一个开始,有的网友在配置过程中用了很多批处理,这与我们做项目来说,真是太麻烦了,能不能直接在项目中来完成配置啊?!答案肯定是有的,但是我在网上查了很多,都没有找到!现在我就把我的测试过程说明一下。

创建web项目testWebService,将axis那个源文件中/axis-src-1_4/axis-1_4/lib 下的几个主要的包(就是第一步中那个配置中提到的那个几个包),拷贝到这个项目的webRoot/WEB-INF/lib下(webRoot是eclipse中创建web project时自动命名的web 根目录,在此我就直接使用了),我的服务类如下:

public class SayHello {
 public String sayHelloTo(String name){
  return "Hello "+ name;
 }
}

配置web.xml文件,在其中加入下面这些配置:

 <servlet>
              <servlet-name>TestServlet</servlet-name>
              <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
      </servlet>
      <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>*.jws</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/servlet/TestServlet</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/services/*</url-pattern>
     </servlet-mapping>
     <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>

启动tomcat,加载项目后,可以在http://localhost:8080/testWebService/servlet/TestServlet下查看到是否有axis的默认web services。如果有,说明你成功了40%了。接着你要写发布文件,我命名为deploy.wsdd,内容如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
 xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <service name="SayHello" provider="java:RPC">
  <parameter name="className" value="server.SayHello"/>
  <parameter name="allowedMethods" value="sayHelloTo"/>
 </service>
</deployment>

其中<parameter name="className" value="server.SayHello"/>代表你的服务类,<parameter name="allowedMethods" value="sayHelloTo"/>代表你的服务类中的方法,可以用空格隔开你提供的多个方法,或者是用*表示这个服务类中的所有方法。我把deploy.wsdd放在webRoot/WEB-INF/下

接下来,就有很多人用了批处理(.bat)文件来进行发布服务,可是我们都知道这是很烦琐的操作,我有了java为什么还要再去用命令式发布呢,我就是要用项目直接来发布,看看他们提供的bat文件内容:

set Axis_Lib=F:/coding/workspace/testWebService/WebRoot/WEB-INF/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/testWebService/servlet/TestServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% F:/coding/workspace/testWebService/WebRoot/WEB-INF/deploy.wsdd
PAUSE

这个是我修改的(新手就是要跟着别人的脚步走,我也走了,唉。。),我的bat就是这样的,但是这个文件的主要部分就是最后一句(不包括pause,这个是为了看看上面这些操作的结果而停顿的,要不然就一闪而过了)

%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% F:/coding/workspace/testWebService/WebRoot/WEB-INF/deploy.wsdd

(不好意思,在这里编辑,就是换了行,实际上这是一个句子),前面的都是设置环境变量,所以我们就可以把这个放到我们的程序来,我是这么写的:

import java.io.File;

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


public class DeployPro {
 public static void deployPro(String servlet) throws Exception{
  File f = new File(".");
  String path = f.getAbsolutePath().toString().replace(".", "");
  String[] args = {"-l"+servlet,path + "WebRoot/WEB-INF/deploy.wsdd"};
  AdminClient.main(args);
 }
}

这里主要是为了通用,我的测试方法如下:

import javax.xml.namespace.QName;

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

public class TestWSClient {
 public static void main(String[] args){
  try{
   
   String endPointUrl = "http://localhost:8080/testWebService/services/SayHello?wsdl";
   DeployPro.deployPro("http://localhost:8080/testWebService/servlet/TestServlet");
   Service service = new Service();
   Call call = null;
   call = (Call)service.createCall();
   call.setTargetEndpointAddress(new java.net.URL(endPointUrl));
   call.setOperationName(new QName(endPointUrl,"SayHelloTo"));
   String res = (String)call.invoke(new Object[]{"pfj"});
   System.out.println(res);
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

发布项目,启动tomcat。输出:

Processing file F:/coding/workspace/testWebService/WebRoot/WEB-INF/deploy.wsdd
<Admin>Done processing</Admin>
Hello pfj

哈哈,成功了!各位如果按照这个方法你还没有成功的话,可以跟我联系:taochenpfj@hotmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值