`
duanfei
  • 浏览: 734012 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Axis 自动生成WebService

阅读更多
用wsdl2java简化客户端的编写
也许有很多读者会说“有没有搞错啊,只调用两个WebService方法用要写这么多代码,太麻烦了”。
不过幸好Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。

一、生成WDSL文件
首先在Service项目写接口类。如FeiAction
public interface FeiAction {
  public String getGreeting(String name);
}

得到src下的class文件拷到classes的文件中。
更改Java2wsdl.bat的内容。指向FeiAction的位置。

设置WEB SERVICE的地址
要注意。一般为:
http://localhost:8080/projectName/services/WSDLNAM

就生成name.wsdl。

二、生成java类
更改wsdl2java.bat的内容。
运行Java2wsdl.bat。可得到我们配置的文件。
把生成的java配置文件拷到service项目与Client项目之中。

三、并引用classes下所有的jar包到Serivice项目与Client项目中。

四、在web.xml中添加以下代码
<listener>
  <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
 </listener>
 <servlet>
  <servlet-name>AxisServlet</servlet-name>
  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>SOAPMonitorService</servlet-name>
  <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
  <init-param>
   <param-name>SOAPMonitorPort</param-name>
   <param-value>5001</param-value>
  </init-param>
  <load-on-startup>100</load-on-startup>
 </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>
 <servlet-mapping>
  <servlet-name>SOAPMonitorService</servlet-name>
  <url-pattern>/SOAPMonitor</url-pattern>
 </servlet-mapping>


五、在web-inf/server-config.wsdd中把生成deploy.wsdd的代码拷入。

六、启动Tomcat。用http://localhost:8080/projectName/services来查看是否成功。

七、在service项目中实现WDSL新生成的接口类。

八、客户端

package com.hongxing.soap.fei.service.action;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;

import com.hongxing.soap.fei.service.FeiActionServiceLocator;

public class StubClient {
  private static String wsUrl="http://localhost:8080/wsdlService/services/Feiservice";
  public static void main(String[] args){
  FeiActionServiceLocator serviceLocator = new FeiActionServiceLocator();
  try {
    URL url = new URL(wsUrl);
    com.hongxing.soap.fei.service.FeiAction ff= serviceLocator.getFeiservice(url);
    String ff1 = ff.getGreeting("爱人");
    System.out.println(ff1);
  } catch (RemoteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  } catch (ServiceException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}
}

上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,getGreeting方法的参数都封装在了GetGreeting类中,要想调用getGreeting方法,必须先创建GetGreeting类的对象实例。


在客户端调用应用服务器上发布出来的WSDL,以实现登陆时获取应用服务器上的某些信息反馈到客户端。现在就简单讲讲在客户端调用WSDL的步骤吧。之前写过两个不同应用服务器之间相互调用WSDL的程序,用的是axis。所以这里就把以前的代码拷贝过来,稍做修改,并且将“axis.jar”,“axis-ant.jar”,“commons-discovery-0.2.jar”,“jaxrpc.jar”,“saaj.jar”,“wsdl4j-1.5.1.jar”这些包拷到客户端的lib下(也不知道哪个有用,哪个没用,反正就拷了这些)。运行的时候,有错误,错误如下:

org.apache.axis.utils.JavaUtils isAttachmentSup
ported
警告: Unable to find required classes (javax.activation.DataHandler and javax.ma
il.internet.MimeMultipart). Attachment support is disabled.
Exception in thread "Thread-5" java.lang.NoClassDefFoundError: javax/wsdl/Operat
ionType……


解决问题:把服务端用的jar包都引入


AxisFault
faultCode: {http://xml.apache.org/axis/}Server.NoService
faultSubcode:
faultString: The AXIS engine could not find a target service to invoke!  targetService is null
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:hx-77d2243bcef6

The AXIS engine could not find a target service to invoke!  targetService is null

原因:这是因为url的址指向的不是所用的targetService而导致的。
解决问题:把url的地址指向server-config.wsdd中service name="serviceName"的地址即可。就是在Java2wsdl.bat设置WEB SERVICE的地址。

WSDL 文档在Web服务的定义中使用下列元素:
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
Binding - 特定端口类型的具体协议和数据格式规范的绑定。
Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
Service - 相关服务访问点的集合。


最后,读取文件
try{
 File file = new File(apkPath);
 SAXReader reader = new SAXReader();
 Document doc = (Document) reader.read(file); 
 Element root = (Element) doc.getRootElement();
 Element foo;
 Iterator it = root.elementIterator("update");
	        	
 //遍历更新节点
 while(it.hasNext()) {
  foo = (Element) it.next();
	        		
  //转到小写
  String type = foo.attributeValue("type").trim().toLowerCase();
  if(phoneType!=null && !"".equals(phoneType))
  phoneType = phoneType.toLowerCase();

  //如果节点中手机类型与终端上传手机类型不一致,则继续查找
  if(!type.equals(phoneType)){
   continue;
  }else{//一致,返回相应型号机型apk所在目录及该机型的最新版本,用#隔开
  versionResult = foo.attributeValue("filePath").trim() + "#" +   foo.attributeValue("version").trim();
  break;
  }
 }
} catch (Exception e) {
 e.printStackTrace();
}
分享到:
评论

相关推荐

    使用axis自动生成webservice客户端代码.pdf

    【使用Axis自动生成WebService客户端代码】是Web服务开发中的一个重要步骤,它简化了客户端调用Web服务的过程。本文档主要介绍了如何使用Axis工具生成客户端代码,以Myeclipse7.0为开发环境,axis1.4为工具版本,...

    使用axis自动生成webservice客户端代码.docx

    【使用Axis自动生成WebService客户端代码】是Web服务开发中的一个重要步骤,它简化了与服务交互的复杂性。本文档主要介绍了如何在MyEclipse 7.0环境下利用Axis 1.4工具生成客户端代码,以便调用并测试Webservice。 ...

    axis自动生成访问webservice代码

    本篇文章将详细探讨如何使用Axis自动生成访问Web服务的代码,以及相关的Java和Web服务知识。 一、Web服务简介 Web服务是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的应用程序,可以在不同系统之间交换数据。它们...

    Axis2生成webservice客户端通用依赖包

    - 运行Axis2工具:使用命令行或者通过 Axis2的管理界面,输入WSDL文件的URL, Axis2会自动生成对应的客户端Java源代码和配置文件。 - 编译生成的源代码:这些源代码包含了客户端调用服务所需的所有类。 - 运行...

    axis2发布webservice和调用axis2服务接口

    1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web服务接口。这个类通常会遵循SOAP协议,定义服务操作。例如,你可以创建一个名为`HelloWorldService`的类,包含一个`sayHello`...

    axis2支持webservice 自动生成代码客户端服务端代码插件

    标题提及的“axis2支持webservice 自动生成代码客户端服务端代码插件”,是指Apache Axis2为Eclipse IDE提供的一套工具,旨在简化Web服务的开发流程。这个插件允许开发者通过WSDL(Web Services Description ...

    Spring集成axis2实现webservice所用到的包

    而Axis2是Apache软件基金会的一个项目,专门用于处理Web服务的生成、部署和消费。通过整合Spring和Axis2,我们可以利用Spring的依赖注入(DI)和管理功能,同时享受Axis2的高性能和易用性。 集成Spring和Axis2的...

    Axis2 创建 webservice 操作手册

    例如,对于`HelloWorldService`,Axis2会自动生成一个`HelloWorldServiceStub`类,你可以使用这个类来调用服务。 ```java HelloWorldServiceStub stub = new HelloWorldServiceStub(...

    axis1.4及webService开发教程

    Axis1.4会根据这些类自动生成Web服务所需的部署描述文件(wsdd)和JavaServer Pages(JSP)。 3. **生成服务端**:使用`wsdl2java`命令,将Java类转换为WSDL文件,然后使用`deploy`命令将服务部署到Web服务器上。...

    使用cxf wsdl2java生成webservice客户端

    使用cxf wsdl2java生成webservice客户端命令

    axis2开发webservice(二)

    第三种方式是利用axis2插件,将wsdl文件自动生成客户端代码,此种方式在myeclipse安装axis2.txt文件中已经做了详细介绍。 备注:资源超过了70M 分成了3部分 见axis2方式开发webservice(一)和 axis2方式开发...

    Axis2搭建WebService服务端demo

    在本文中,我们将深入探讨如何使用Spring、Axis2和Maven构建一个基于Java的Web服务(WebService)服务端示例。这些技术的结合为开发人员提供了高效、灵活且可扩展的解决方案来创建和消费Web服务。 首先,让我们了解...

    SpringBoot开发WebService之Axis示例

    Axis提供了从WSDL(Web服务描述语言)到Java代码的生成,以及从Java类到WSDL的逆向工程,使得开发Web服务变得简单。 要将SpringBoot与Axis结合,我们需要以下步骤: 1. **创建SpringBoot项目**:首先,我们需要一...

    Axis1 创建Webservice 服务端

    Axis1会在服务部署后自动生成WSDL文件,它定义了服务的接口和操作。 7. **调用服务**:客户端应用可以通过发送SOAP请求到服务端点地址来调用Web服务。请求应该包含在SOAP消息中,消息体包含调用的具体方法和参数。 ...

Global site tag (gtag.js) - Google Analytics