⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axis开发webservice传bean对象返回string串的实例.rtf

📁 用Axis开发Webservice传Bean对象返回String串的实例
💻 RTF
📖 第 1 页 / 共 2 页
字号:
	    |- ..(略)...
    将解压后,C:\axis-1_4\webapps 目录下的 axis 目录 Copy 到 tomcat/webapps目录(C:\Axis_webservice\Tomcat_4_1\webapps)下,

架设AXIS:
首先,将deploy.wsdd文件Copy到 %AXISCLASSPATH%/WEB-INF 目录下;
其次,将之前的类编译后,连路径一起Copy到 %AXISCLASSPATH%/WEB-INF/classes目录下,
最后,将tomcat的 catalina 服务启动.
(即:C:\Axis_webservice\Tomcat_4.1\bin,

   [特别注意的是:]
       A。tomcat务必启动。
       B。在写如上的命令行时,务必注意参数的写法。“-D” 与 “-S”与其值间不能有空格。切记!
       C。各XX的路径里,最好是不要有空格,因为JAVA里对大小写与路径空格有校验。
,)

测试:
命令行启动方法;运行"cmd",在命令行里写:"cd C:\Axis_webservice\Tomcat_4.1\bin",回车,再写:"  catalina run ",回车,OK!
后台会报错:
"
- Unable to find config file.  Creating new servlet engine config file: /WEB-INF/server-config.wsdd
2007-1-20 10:07:48 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on port 8080
"
说明,在../WEB-INF/下没有"server-config.wsdd",暂时忽略。
在IE地址栏写:http://localhost:8080/axis
可见,axis 欢迎首页,点击 "list" 便可看到默认情况下发布了两个服务下各有一个方法。一切准备工作已经OK!


再回到,刚才我们写的那个批处理文件:" makeWsdd.bat",
直接双击,便可执行, 有一个警告,可以忽略的。执行完成后,在相应的
%AXISCLASSPATH%/WEB-INF下便有一“server-config.wsdd”文件,如下:

      *server-config.wsdd*
*《********************************

<?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">
 <globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="adminPassword" value="admin"/>
  <parameter name="attachments.Directory" value="C:\Axis_webservice\Tomcat_4.1\webapps\axis\WEB-INF\attachments"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="sendXsiTypes" value="true"/>
  <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
  <requestFlow>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="session"/>
   </handler>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="request"/>
    <parameter name="extension" value=".jwr"/>
   </handler>
  </requestFlow>
 </globalConfiguration>
 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
 <service name="AdminService" provider="java:MSG">
  <parameter name="allowedMethods" value="AdminService"/>
  <parameter name="enableRemoteAdmin" value="false"/>
  <parameter name="className" value="org.apache.axis.utils.Admin"/>
  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
 </service>
 <service name="Version" provider="java:RPC">
  <parameter name="allowedMethods" value="getVersion"/>
  <parameter name="className" value="org.apache.axis.Version"/>
 </service>
 <service name="OrderProcessor" provider="java:RPC">
  <parameter name="allowedMethods" value="processOrder"/>
  <parameter name="className" value="samples.userguide.example5.BeanService"/>
  <beanMapping languageSpecificType="java:samples.userguide.example5.Order" qname="ns1:Order" xmlns:ns1="urn:BeanService"/>
 </service>
 <transport name="http">
  <requestFlow>
   <handler type="URLMapper"/>
   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
  </requestFlow>
  <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
  <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
 </transport>
 <transport name="local">
  <responseFlow>
   <handler type="LocalResponder"/>
  </responseFlow>
 </transport>
</deployment>


********************************》*
  
再去打开:"http://localhost:8080/axis/servlet/AxisServlet",或者,再刷新。
便可以看到,我们新发布的一个webservice接口服务,其名为:"OrderProcessor "
此服务下的个方法:其名为:"processOrder "。

点击服务对应的"(WSDL)"可见服务WSDL描述内容。在其中也可以得服务的访问地址:
"http://localhost:8080/axis/services/OrderProcessor?wsdl"
服务器端的开发,搞定了!

-:)    -:)    -:)   

接下来,准备开发,客户端的开发。




      * Client.java *
*《********************************
package samples.userguide.example5;

/**
 * This is a JavaBean which represents an order for some products.
 * Copyright: Copyright (c) 2007-1 
 * @author Black skin (blackskin@126.com)
 * @version 1.0
 */

import java.net.URL;

import org.apache.axis.AxisFault;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.utils.Options;

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

public class Client {
	public static void main(String[] args) throws Exception {
		//Options options = new Options(args);
		String urlWsdl = "http://localhost:8080/axis/services/OrderProcessor?wsdl";

		Order order = new Order();
		order.setCustomerName("Black Skin");
		order.setShippingAddress("275 Grove Street, Newton, MA");

		String[] items = new String[] { "apple", "160ml-Milk" };
		int[] quantities = new int[] { 8, 4 };

		order.setItemCodes(items);
		order.setQuantities(quantities);

		Service service = new Service();
		Call call = (Call) service.createCall();
		QName qn = new QName("urn:BeanService", "Order");

		call.registerTypeMapping(Order.class, qn,
				new org.apache.axis.encoding.ser.BeanSerializerFactory(
						Order.class, qn),
				new org.apache.axis.encoding.ser.BeanDeserializerFactory(
						Order.class, qn));
		String result;
		try {
			//call.setTargetEndpointAddress(new java.net.URL(options.getURL()));
			call.setTargetEndpointAddress(new java.net.URL(urlWsdl));
			call.setOperationName(new QName("OrderProcessor", "processOrder"));
			call.addParameter("arg1", qn, ParameterMode.IN);
			call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

			result = (String) call.invoke(new Object[] { order });
		} catch (AxisFault fault) {
			result = "Error : " + fault.toString();
		}

		System.out.println(result);
	}
}

********************************》*

oK! 到此,一个完整的Webservice例子就搞定了。

另外,Axis 还提供了一些工具,如:" wsdl2java "、" java2wsdl "

处理的方式与方法:
  java2wsdl:
   1. 以上为例,在以上工程的class输出目录新建一BAT文件:名为:“java2wsdl.bat”
   2. 其内容为:
         * java2wsdl.bat *
*《********************************
set AXIS_LIB=C:\axis-1_4\lib
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java org.apache.axis.wsdl.Java2WSDL -o Order.wsdl  -l"http://localhost:8080/axis/services/OrderProcessor" -n "urn:BeanService"  -p"samples.userguide.example5.Order" "urn:Order" samples.userguide.example5.BeanService
********************************》*

把AXIS_LIB设为正确的本地包路径,再运行“java2wsdl.bat”,
便可以在目录下看到一个文件:“Order.wsdl”,通过这个WSDL文件,可以生成Webservice接口服务的框架,
既可以是服务器端,也可以是客户端框架。其细节,可以参考下一节。


处理的方式与方法:
  wsdl2java :
   1. 以上为例,把Order.wsdl拷贝过来,在其目录下新建一BAT文件:名为:“wsdl2java.bat”
   2. 其内容为:
       * wsdl2java.bat *
*《********************************
set AXIS_LIB=C:\axis-1_4\lib
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java org.apache.axis.wsdl.WSDL2Java Order.wsdl
********************************》*

或者有另外的作法:把服务端的应用启动,直接写成:
java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/OrderProcessor?wsdl
保存好后,运行这个BAT文件,
便会自动生成:
BeanService_pkg\
  BeanService.java
  BeanServiceService.java
  BeanServiceServiceLocator.java
  OrderProcessorSoapBindingStub.java    
  Order.java

ok.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -