axis webservice怎么会返回对象

 我来答
匿名用户
2015-03-21
展开全部
axis1传递简单对象,对象内只有基本类型,如:String,int等 1.创建一个javaBean,类名为User。
package com.devtek;

public class User {

private String name="llc";
private int age = 25;

public String toString() {

return"name"+ name +"age"+ age ;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
2. 服务端编写。package com.devtek;

public class ServiceServer {

// 参数和返回世神值不包含对象
public String getName(String name) {
if (name == null) {
name ="";
}
return"你好"+ name +",欢迎来到Web服务的世界!";
}
public String getUserName(User user) {
return user.getName();
}

public User getUser(String name, String password) {
return new User();
}

/或芹/ 返回简单的对象(只包含基本的类型)
public User getUser(User user) {
System.out.println(user.getName());
return user;
}
}

3. 发布服务,在server-confing.wsdd文件中进行配置。<?xml version="1.0"encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
xmlns="http://xml.apache.org/axis/wsdd/">
<globalConfiguration name="defaultClientConfig">
<requestFlow name="RequestFlow1"type="">
<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope"value="session"/>
</handler>
<handler name="Handler2"
type="衫返毕java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope"value="request"/>
<parameter name="extension"value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<transport name="http"type="">
<requestFlow name="RequestFlow1"type="">
<handler name="Handler1"type="URLMapper"/>
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local"type="">
<responseFlow name="ResponseFlow1"type="">
<handler name="Handler1"type="LocalResponder"/>
</responseFlow>
</transport>
<!--这里配置了一个Web Service,如果有多个Web Service,就按这种格式在下面增加即可-->
<service name="User"provider="java:RPC">
<!-- 作用域 -->
<parameter name="scope"value="Request"/>
<!-- 发布的webservice类名 -->
<parameter name="className"value="com.devtek.ServiceServer"/>
<!-- 发布webservice方法,value="*"'*'代表所有, 如果不想发布所有的方法,可以在
value 中,每个方法用空格分开,如发布两个方法:value="getUserName getUser"
-->
<parameter name="allowedMethods"value="*"/>
<!-- 对象映射,一对象为参数或返回值 -->
<beanMapping languageSpecificType="java:com.devtek.User"
qname="ns1:User"xmlns:ns1="com.devtek"/>
<!-- 类型映射,将对象进行序列化(out)和反序列化(in) -->
<typeMapping languageSpecificType="java:com.devtek.User"
qname="ns1:User"xmlns:ns1="com.devtek"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/>
<namespace>com.devtek</namespace>
</service>
</deployment>
4. 客户端调用。package com.devtek;

import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

public class Client {

public static void main(String[] args) {
try {
String endpoint ="http://127.0.0.1:8089/axis1/webservices/User?wsdl";

Service service = new Service();
Call call = null;
QName qn = new QName("http://127.0.0.1:8089/axis1/webservices/User",
"getUser");
call = (Call) service.createCall();
// 注册序列化和反序列化类
call.registerTypeMapping(User.class, qn,
new BeanSerializerFactory(User.class, qn),
new BeanDeserializerFactory(User.class, qn));
// 设置返回类型
call.setReturnType(qn, User.class);
call.setOperationName(qn);
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.addParameter("user", qn, javax.xml.rpc.ParameterMode.IN);

User user = new User();
User ret = (User) call.invoke(new Object[] { user });
System.out.println("return value is"+ ret);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
1. 在服务类serviceServer中增加一个方法: public User[] getUserList(User[] user) { return user; } 2. 在server-config.wsdd的<service>中增加一个<arrayMapping>标签,标签内配置自定义对象数组。 <!-- 配置自定义对象数组type,将对象数组进行序列化和反序列化 --> <arrayMapping languageSpecificType="java:com.devtek.User[]" qname="ns1:User"xmlns:ns1="com.devtek" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"/> 3. 客户端调用。public static void main(String[] args) {

User[] ret = null;
try {
String endpoint ="http://127.0.0.1:8089/axis1/webservices/User?wsdl";

Service service = new Service();
Call call = null;
QName qn = new QName("http://127.0.0.1:8089/axis1/webservices/User",
"getUserList");
call = (Call) service.createCall();
// 注册序列化和反序列化类
call.registerTypeMapping(User.class, qn,
new BeanSerializerFactory(User.class, qn),
new BeanDeserializerFactory(User.class, qn));

// 设置返回类型
call.setReturnType(qn, User[].class);
// 设置方法
call.setOperationName(qn);
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.addParameter("user", qn, javax.xml.rpc.ParameterMode.IN);

User[] user = new User[]{new User(),new User()};
ret = (User[]) call.invoke(new Object[] { user });
System.out.println("return value is"+ (User)ret[1]);
} catch (Exception ex) {
ex.printStackTrace();
}
return ret;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式