29

好了现在我们将webservice的实现代码发布到tomcat的axis web应用中。如将你的代码拷贝到axis/WEB-INF/classes下

进入你的deploy.wsdd所在目录。

cd C:\tomcat5\webapps\axis\WEB-INF\classes\com\yy\ws

输入如下命令:

C:\tomcat5\webapps\axis\WEB-INF\classes\com\yy\ws>   java     org.apache.axis.client.AdminClient  deploy.wsdd 更多详细内容 »

Tags:

作者:Jock

29

除了最后两个发布文件以外最重要的有两个文件,即MobileBossSoapBindingImpl.java和MobileBossServiceLocator.java

MobileBossSoapBindingImpl代码如下:

java 代码

1.   java 代码 更多详细内容 »

Tags:

作者:Jock

29

进入接口所在源文件的文件夹(包的最上层,如果包名是com.yy.ws则需要在com的上一层目录下如classes),我的文件夹结构是classes/com/yy/ws/所以我需要进入源文件目录:

C:\ws>cd classes

在控制台输入如下命令:

C:\ws\classes>  java org.apache.axis.wsdl.Java2WSDL  -o mb.wsdl -l “http://localhost:8080/axis/services/MobileBoss” -n “urn:MobileBoss” -p”com.yy.ws” “urn:MobileBoss”  com.yy.ws.MobileBoss

参数说明: -o  输出wsdl文件名称
                  -l 访问的url
                 -n 命名空间
                -p  包名 命名空间的名字(urn:是命名空间的缩写,必须有!)
              com.yy.ws.MobileBoss 是接口的全路径。包名+类名。 更多详细内容 »

Tags:

作者:Jock

29

下面是服务器响应对象。如下:

java 代码

1.          package com.yy.ws;  

2.          public class ServerResponse {  

3.              private long resultCode;  

4.              private String message;  

5.              public String getMessage() {  

6.                  return message;  

7.              }  

8.              public void setMessage(String message) {  

9.                  this.message = message;  

10.           }   更多详细内容 »

Tags:

作者:Jock

29

随着SOA的流行,webservice开发也变得相当的热门。许多企业都将自己的网站迁移到soa的架构。今天我们来一起体验一下通过axis来创建、发布和调用webservice的过程。如果大家不太了解SOA请访问下面网址(http://www-900.ibm.com/cn/software/rational/solution/tech/soa_design.shtml)

       在开始之前我默认大家已经具有axis的安装经验,如果对axis安装和配置发布有任何问题请看http://yangyang.javaeye.com/blog/56519 和http://yangyang.javaeye.com/blog/56552两篇文章。let's go!

      首先我们先假设一个需求。我们需要一个service,功能是给手机充值,充值成功后返回操作代码和消息。给手机充值需要手机号、充值金额、操作类型。操作成功或者失败后返回操作代码和消息。在这里我们将客户端的请求和服务器端响应进行了包装代码如下: 更多详细内容 »

Tags:

作者:Jock

十一 07

[codes=java]
package Example6;
/**  
* @author Jock  
*  
*/  
public final class TestClient {  
 
 /**  
  * @param args  
  */  
 public static void main(String[] args) {  
   //获得一个locator对象  
   WidgetPriceServiceLocator locator = new WidgetPriceServiceLocator();  
   locator.setMaintainSession(true);  
   try{  
     WidgetPrice s = locator.getWidgetPrice();  
     s.setWidgetPrice(“1″,”10.67″);
     s.setWidgetPrice(“2″,”12.45″);
     s.setWidgetPrice(“3″,”11.37″);
     s.setWidgetPrice(“4″,”13.29″);
     System.out.println(s.getWidgetPrice(“4″));  
     System.out.println(s.getWidgetPrice(“3″));  
     System.out.println(s.getWidgetPrice(“2″));  
     System.out.println(s.getWidgetPrice(“1″));  
   }catch(Exception e){  
     e.printStackTrace();  
   }  
 
 }  
 
}
[/codes]

执行java Example6.TestClient

输出:
13.29
11.37
12.45
10.67

Tags:

作者:Jock

十一 06

设置好环境变量classpath及ant等,
编译example6,进入axis-1_4\samples\userguide\example6目录,
修改build.xml文件中java2wsdl中的location一项为正确的url。
执行ant。
编译好的文件在axis-1_4\build\work\samples\userguide\example6目录下,
文件清单:
build.xml
deploy.wsdd
Main.class
Main.java
undeploy.wsdd
WidgetPrice.class
WidgetPrice.java
WidgetPrice.wsdl
WidgetPriceService.class
WidgetPriceService.java
WidgetPriceServiceLocator.class
WidgetPriceServiceLocator.java
WidgetPriceServiceTestCase.class
WidgetPriceServiceTestCase.java
WidgetPriceSoapBindingImpl.class
WidgetPriceSoapBindingImpl.java
WidgetPriceSoapBindingSkeleton.class
WidgetPriceSoapBindingSkeleton.java
WidgetPriceSoapBindingStub.class
WidgetPriceSoapBindingStub.java

进入该目录执行发布服务的命令
java org.apache.axis.client.AdminClient -lhttp://localhost/services/AdminService deploy.wsdd

访问http://localhost/servlet/AxisServlet,可以看见多了一个服务。
WidgetPrice (wsdl)
setWidgetPrice
getWidgetPrice


继续客户端调用的实践。。。

Tags:

作者:Jock

十一 05

对axis提供的sample/example2/Calculator试用,
将Calculator.java放到resin的webapp目录下,根据返回的wsdl生成代码,
D:\source\webservice\src>java org.apache.axis.wsdl.WSDL2Java –server-side –skeletonDeploy true Calculator.wsdl

写一个测试客户端例子
[codes=java]
/**
*
*/
package cn.org.jock.axis.Calculator_jws;

/**
* @author Jock
*
*/
public final class TestClient {

  /**
   * @param args
   */
  public static void main(String[] args) {
    //获得一个locator对象
    CalculatorServiceLocator locator = new CalculatorServiceLocator();
    locator.setMaintainSession(true);
    try{
      Calculator service = locator.getCalculator();
      int a = service.add(3, 4);
      int b = service.subtract(9, 3);
      System.out.println(a+"\n"+b);
    }catch(Exception e){
      e.printStackTrace();
    }

  }

}
[/codes]
就可以像调用本地方法一样调用了。继续学习怎么使用自定义的对象。

Tags:

作者:Jock

十一 04

问题描述

执行WSDL2Java时报告下面的异常:
java.io.IOException: Type {http://schemas.xmlsoap.org/wsdl/} ArrayOfFailedRecord is referenced but not defined.

原因分析

出现上述情况可能的原因有:

类型未定义就被引用。

使用了错误的名字空间。

WSDL文件中存在输入错误。

解决方法

经过仔细检查发现wsdl文件中的 更多详细内容 »

Tags:

作者:Jock

十一 04

问题描述

WEB服务接口编写完成并发布后,客户端测试程序收不到WEB服务的返回结果,Apache或Resin的log中也看不到访问记录。但测试程序返回结果为0(成功),在没有部署该WEB服务的情况下,也是这个结果,因此怀疑调用的是WSDL文件的提供者自己测试用的WEB服务接口,可能与另一方提供的WSDL文件有关。

原因分析

合作伙伴调用WEB服务就能够成功,从WEB服务主机自己的客户端调用就接收不到数据,估计与合作伙伴提供的WSDL文件有关,该WSDL文件影响了WSDL2Java生成的客户端stub代码。检查stub代码,发现其soapAction都指向了合作伙伴的测试地址。

解决方法

修改stub代码中的soapAction,改为sp(Service Provider)自己的WEB服务URL。重新编译程序并发布Web服务,问题解决。

_call.setSOAPActionURI("sp自己的Web服务地址");

小结

本小节描述的问题出现于Web服务提供方按合作伙伴统一提供的WSDL文件生成客户端代码的情况。遇到这类问题,读者可直接检查WSDL2Java自动生成的代码的有关部分。

在WSDL文件中可以看到与下列内容相似的设置。



<wsdl:service name="SPInterfaceForVNet">
<wsdl:port binding="impl:SPInterfaceSoapSoapBinding" name="SPInterfaceForVNetSoap">
 <wsdlsoap:address location="http://test.com/services/SPInterfaceSoap" />
 </wsdl:port>
 </wsdl:service>



其中 http://test.com/services/SPInterfaceSoap即为已发布的WEB服务的URL,供客户端调用。

Tags:

作者:Jock

Switch to our mobile site