java axis1的发送报文_Axis开发Webservice传Bean对象返回String串的实例

本文详细介绍了如何使用Java Axis1框架开发一个Webservice,包括创建Bean类、服务类,以及部署和测试Webservice。通过一个完整的示例,展示了从创建服务到发布服务的过程,并提供了客户端调用服务的代码。

对于webService 以前也接触过.但只是皮毛,这次可是来真格的.来就来吧,年轻人这就是机会.一定得把握好,干它一票! 呵,就在网上到处找找啊,在本地机器上左试试,右试试啊, 什么法子都用一遍。就不信搞不定它,小样!

网上的例子也比较散,比较简易的,达不我想要的业务水平,只能慢慢搜索与摸索吧。。。。。。就这样天天想着这事,也没什么心情来这里写写。

近些天,也快回深圳了,定在下周四动身吧。这边的工作也得告一节了。把我前一些日子,搞一个完整的Samples 放到这里来,与大家共享。希望对有心人有些启发,也希望高人指点与点评。。。。。。。、

****************************************************

*Axis开发Webservice传Bean对象返回String串的实例.rtf*

****************************************************

在ECLIPSE 里新建一工程,其次建包,再次建类,

基本包:samples.userguide.example5

基本类: Order.java

内容:

*  Order.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

*/

public class Order {

/** Who's ordering */

private String customerName;

/** Where do they live */

private String shippingAddress;

/** Which items do we want */

private String itemCodes[];

/** And how many */

private int quantities[];

// Bean accessors

public String getCustomerName() {

return customerName;

}

public void setCustomerName(String name) {

customerName = name;

}

public String getShippingAddress() {

return shippingAddress;

}

public void setShippingAddress(String address) {

shippingAddress = address;

}

public String[] getItemCodes() {

return itemCodes;

}

public void setItemCodes(String[] items) {

itemCodes = items;

}

public int[] getQuantities() {

return quantities;

}

public void setQuantities(int[] quants) {

quantities = quants;

}

}

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

主服务包: samples.userguide.example5

主服务类: BeanService.java

如下:

* BeanService.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

*/

public class BeanService {

public String processOrder(Order order) {

String sep = System.getProperty("line.separator");

String response = "Hi, " + order.getCustomerName() + "!" + sep;

response += sep + "You seem to have ordered the following:" + sep;

String[] items = order.getItemCodes();

int[] quantities = order.getQuantities();

for (int i = 0; i < items.length; i++) {

response += sep + quantities[i] + " of item : " + items[i];

}

response += sep + sep + "If this had been a real order processing system, "

+ sep + "we'd probably have charged you about now.";

return response;

}

public static void main(String[] args) throws Exception{

/** Who's ordering */

String customerName = "Black Skin";

/** Where do they live */

String shippingAddress = "001 xingan Street, bayuquan, YK";

/** Which items do we want */

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

/** And how many */

int[] quantities = new int[] { 2, 4 };

/** request class init() */

Order order = new Order();

order.setCustomerName(customerName);

order.setShippingAddress(shippingAddress);

order.setItemCodes(items);

order.setQuantities(quantities);

/** server class init() */

BeanService beanservice = new BeanService();

String result = beanservice.processOrder(order);

/** OutPut the result */

System.out.println(" " + result);

}

}

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

BeanService.java里有个本地测试方法(samples.userguide.example5.BeanService.main()),来测试此应用的可运行性;

到此,服务端类写完了,接着来把此类的方法发布成 WebService 接口

手写一个deploy.wsdd 文件,可以参考下面的例子:

*deploy.wsdd例子*

*《********************************

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

显然,简单,造一个deploy.wsdd 信手捏来,如下:

*deploy.wsdd*

*《********************************

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

有了deploy.wsdd文件了,接着通过它来生成 server-config.wsdd.

OK! 用命令直接生成就行;在deploy.wsdd 的文件夹下新建一个 makeWsdd.bat.

其中的写法有下面的例子来参考:

* makeWsdd.bat 例子*

*《********************************

set AXISCLASSPATH= “应用发布的路径”

set AXIS_LIB= “AXIS框架的内部JAR包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 -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient

-S服务名\services\AdminService -p端口号(如果你的端口号不是默认的8080需要指定。

例如:8899)deploy.wsdd

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

如此,我写了一“makeWsdd.bat”文件。如下:

* makeWsdd.bat*

*《********************************

set AXISCLASSPATH=C:\Axis_webservice\Tomcat_4.1\webapps\axis

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 -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient

-SBeanServer\services\AdminService -p 8080 deploy.wsdd

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

保存好,接下来架设Webservice.

环境架设:

首先,安装JDK...(略)...本例用JDK版本号V1.4.

其次,安装Tomcat...(略)...本例用Tomcat版本号V4.1.

再次,AXIS...(略)...本例用AXIS版本号V1.4. 去AXIS官方网站:http://www.apache.org下载AXIS,解压后得,

|- axis-1_4

|- docs

|- ..(略)...

|- lib

|- axis.jar

|- axis-ant.jar

|- commons-discovery-0.2.jar

|- commons-logging-1.0.4.jar

|- jaxrpc.jar

|- log4j-1.2.8.jar

|- log4j.properties

|- saaj.jar

|- wsdlj-1.5.1.jar

|- samples

|- ..(略)...

|- webapps

|- axis

|- ..(略)...

|- xmls

|- ..(略)...

将解压后,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*

*《********************************

http://xml.apache.org/axis/wsdd/

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

再去打开:"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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值