`

12、webservice-AXIS-1.4_demo1

    博客分类:
  • mvc
 
阅读更多
<转>http://blog.csdn.net/angus_17/article/details/8032856
让我们来看一种需求,集团公司可能具有多种WEB应用。比如,前年开发了个进销存系统、去年开发了一个ERP、今年又开发了一个OA。现在这家集团公司需要将这三个系统整合,难道需要重新编码将它们整合吗?而这三个系统又是用不同语言编写的,这种成本对公司来说无疑是一种浪费。WebService可以很好的解决这种需求。

WebService像是一条线将这些系统穿起来——企业服务总线(ESB),什么是整合?当然是功能和数据的整合,也就是一个系统可以调用另一个系统的WebService接口来完成数据的交互。这样我们就需要知道,提供WebService服务功能的应用公开了哪些接口,我们可以通过WebService描述文档(WSDL)得知。WSDL不需要我们手动编写,Java的WebService实现可以为我们自动生成。JDK1.6新增支持WebService,但还不够成熟。所以我们使用Apache第三方开源组织提供的WebService实现——Axis。
下面开始编写服务端代码:
1.在MyEclipse中,建立一个WebProject。命名为WebService.
2.下载axis1.4的包,解压,里面有一些关于axis的资料和文件。
将webapps里面的,WEB-INF中的web.xml复制,替换到自己的WebService项目中。
如果你没有,可以将下如代码拷贝到你的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>
  <display-name>Apache-Axis</display-name>
   
    <listener>
        <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
    </listener>
   
  <servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AxisServlet
    </servlet-class>
  </servlet>

  <servlet>
    <servlet-name>AdminServlet</servlet-name>
    <display-name>Axis Admin Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AdminServlet
    </servlet-class>
    <load-on-startup>100</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>SOAPMonitorService</servlet-name>
    <display-name>SOAPMonitorService</display-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>

<!-- uncomment this if you want the admin servlet -->
<!--
  <servlet-mapping>
    <servlet-name>AdminServlet</servlet-name>
    <url-pattern>/servlet/AdminServlet</url-pattern>
  </servlet-mapping>
-->

    <session-config>
        <!-- Default to 5 minute session timeouts -->
        <session-timeout>5</session-timeout>
    </session-config>

    <!-- currently the W3C havent settled on a media type for WSDL;
    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
    for now we go with the basic 'it's XML' response -->
  <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>

  <welcome-file-list id="WelcomeFileList">
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jws</welcome-file>
  </welcome-file-list>
</web-app>
添加jar包:


部署启动 url:http://localhost:8080/WebService/services

表示环境搭建工作已经完成了。可以进入真正的开发了。

用wsdd方法首先需要定制我们的wsdd xml文件,这里命名为deploy.wsdd,创建在当前web工程的WEB-INF目录下,代码如下:
<?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">    
<service name="HelloServices" provider="java:RPC">        
<parameter name="className" value="HelloService"/>         
<parameter name="allowedMethods" value="*"/>  
 <parameter name="scope" value="request" />   
</service> 
</deployment>

service标签代表一个WebService服务,HelloWorldWSDD就是当前WebService的名称;provider是java的WebService类型,分别有: RPC、Document、Wrapped、Message、EJB、RMI;有兴趣的可以看看org.apache.axis.providers.java包下面的WebService的实现类或是文档;

className代表当前WebService的class类路径;
allowedMethods代表暴露的方法,那些方法在客户端可以调用;
<parameter name="scope" value="request" />
这个是当前WebService的作用域,它有3个值,分别是:request、session、application。
request代表为每个WebService SOAP的请求都产生一个服务对象,和Spring的scope很像,在服务请求频繁的话会消耗很多资源。
session 是给每个调用当前WebService的客户端创建一个服务对象
application 是个当前所有的请求创建一个服务对象

写完配置后,就需要用axis提供的AdminClient工具类来发布到WebService,直到生成server-config.wsdd,步骤如下:运行cmd命令,然后进入当前工程发布的目录,即%tomcat_home%/webapps/project/WEB-INF>

我的是:D:\program files (x86)\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\webapps\WebService\WEB-INF

然后输入命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

这里的deploy.wsdd是我们刚才定制的wsdd文件,java当然是jvm的命令,-Djava.ext.dirs=lib设置当前命令的依赖包,AdminClient是axis提供的工具类,这个类本来是可以在官方的工程中admin可以直接运行的(这里不可以,下载下来的少了AdminServlet,有兴趣的可以研究下,就是前面说的官方的示例);

如果运行命令后,看到:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
但是:
D:\program files (x86)\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\web
apps\WebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminCli
ent deploy.wsdd
Processing file deploy.wsdd
Exception: AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode:
 faultString: (404)Not Found
 faultActor:
 faultNode:
 faultDetail:
        {}:return code:  404

看看deploy.wsdd同级目录有没有生成server-config.wsdd如果有这个文件就成功了,没有就失败了。如果失败了就换命令行代码如下:
D:\program files (x86)\apache-tomcat-7.0.59-windows-x64\apache-tomcat-7.0.59\web
apps\WebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminCli
ent -lhttp://localhost:8080/WebService/services/AdminService deploy.wsdd
Processing file deploy.wsdd
<Admin>Done processing</Admin>

因为你的端口可能被axis占用了,我们将指定AdminService来完成转换,运行上面命令就没有问题了。

再在浏览器中输入http://10.64.59.12:8080/WebService/services时,看到


则HelloServices就被成功发布了。


其他程序来访问真个HelloService:

import java.io.IOException;
import java.net.MalformedURLException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class Test_Webservice {
private static final Log log = LogFactory.getLog(Test_Webservice.class);
private static final String HELLO_SERVICE_ENDPOINT = "http://localhost:8080/WebService/services/HelloServices?wsdl";

/**
* 调用sayHello方法
*/
public void callSayHello() {
try {
Service service = new Service();
Call call = (Call) service.createCall();
//传递url
call.setTargetEndpointAddress(new java.net.URL(HELLO_SERVICE_ENDPOINT));
//调用方法名字
call.setOperationName(new QName("http://webservice.sinosoft.com/","sayHello"));
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
try {
//ret即执行方法之后得到的返回值,此处不用传参,故不用写字符串
String ret = (String) call.invoke(new Object[] {});
System.out.println("The return value is:" + ret);
return;
}
catch (IOException e) {
e.printStackTrace();
}
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (ServiceException e) {
e.printStackTrace();
}
log.error("call sayHello service error!");
}

/**
* 调用sayHelloToPerson方法
*/
public void callSayHelloToPerson() {
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(HELLO_SERVICE_ENDPOINT));
call.setOperationName(new QName("http://webservice.sinosoft.com/","sayHelloToPerson"));
call.addParameter("name", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
try {
//ret即执行方法之后得到的返回值,此处传了一个字符串做为参数,如果不写空,会报错
String ret = (String) call.invoke(new Object[] {"Seven"});
System.out.println("The return value is:" + ret);
return;
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
log.error("call sayHello service error!");
}

/**
* 调用两个方法
* @param args
*/
public static void main(String[] args) {
Test_Webservice tester = new Test_Webservice();
tester.callSayHello();
tester.callSayHelloToPerson();
}
}

print:
The return value is:hello
The return value is:hello Seven
  • 大小: 7.8 KB
  • 大小: 16 KB
  • 大小: 4.5 KB
  • 大小: 8.3 KB
分享到:
评论

相关推荐

    [JAVA]-Axis-Webservice-Demo

    `axis-1_4`文件夹可能包含了Axis1.4的完整版本,其中包括了Axis的库文件、文档、示例和工具等。要使用Axis,需要将其配置到你的开发环境中,通常是将lib目录下的jar文件添加到项目的类路径中,并确保服务器环境中也...

    Springboot集成axis1.4的demo

    1. **添加依赖**:在Spring Boot项目的`pom.xml`文件中,我们需要添加Axis1.4和Spring Web Services的依赖。由于Spring Boot默认不包含对Axis的支持,所以需要手动引入。 ```xml &lt;!-- 添加Axis1.4依赖 --&gt; ...

    springboot使用axis1.4的demo

    1. **添加依赖**:首先,我们需要在`pom.xml`文件中添加Axis1.4的依赖。这可以通过在Maven仓库中查找相应的坐标并将其添加到依赖管理部分完成。 2. **创建Web服务**:编写一个Java类,该类将作为Web服务的实现。这...

    Springboot,axis1.4的demo

    2. **创建 Web 服务**:在 Axis1.4 中,你可以通过编写 Java 类并使用特定的注解(如 `@WebService`)来定义 Web 服务。这个类将包含你的业务逻辑,并可以通过 SOAP 调用来访问。 3. **配置 SpringBoot**:为了使 ...

    Axis_Service_Demo

    其中axis1.4是比较稳定和成熟的一种。。。 axis的下载 http://ws.apache.org/axis/ 这里面有两个项目 1.edi_client_axis 2.edi_server_axis edi_client_axis可以通过URL地址访问edi_server_axis 的服务

    Axis1.4开发指南

    本指南详细介绍了Axis1.4的高级特性,并提供了经过测试的DEMO,帮助读者更好地理解和应用。 1. **WebService简介** - **WebService介绍**:WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的分布式计算...

    Java Axis 直接调用webservice 接口工具类

    Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;

    axis1.4的学习总结以及相应部署所有用到的jar包

    在这里是本人经过对网络资源的学习总结出来的应用axis1.4进行webservice开发的总结,里面有简单的demo以及所有工程用到的jar包,以及如何进行webservice的部署与发布 (注:这里用到的webservice是基于简单的单值...

    wsdl2java_jar.zip

    1. **axis-1.4.jar**:这是Apache Axis 1.4版本的核心库,包含用于处理Web服务请求和响应的类。Axis是一个开源的Web服务框架,它实现了SOAP(简单对象访问协议)和WSDL标准。 2. **mail-1.4.7.jar**:这包含...

    Axis 服务端/客户端 样例

    这个【Axis WebService RPC Demo】标签暗示了示例可能使用了远程过程调用(RPC)风格的Web服务,这是一种简单的Web服务模型,使得服务看起来就像是直接调用了本地函数一样。这使得客户端和服务器之间的交互更加直观...

    Quartz Spring整合——附带webservice Demo

    5. **WebService Demo**:结合标签中的 "webservice",这个示例可能还包含了一个基于 SOAP 的 Web 服务。在 Java 中,通常使用 JAX-WS 或 Apache CXF 等库来创建和消费 Web 服务。由于文件列表中没有明确的 JAX-WS ...

    java WSDL接口webService实现方式

    "java WSDL接口webService实现方式" 在本文中,我们将详细介绍java WSDL接口webService实现方式的相关资料,为大家提供了一定的参考价值。 一、使用JDK生成WSDL的对象类 在使用JDK生成WSDL的对象类时,我们可以...

    apache CXF 2 way SLL

    在 Java 平台上,Apache CXF 和 Axis 是两个非常流行的工具,它们可以帮助开发者生成用于 WebService 的代码。 CXF 提供了两种主要的开发方式: - **WSDL-First 方法**:先编写 WSDL 文件,然后根据该文件生成...

Global site tag (gtag.js) - Google Analytics