WebService传递Object

dr_lou 2009-04-15 05:05:36

package palmcity.sketchmap.ws.base;

import java.io.Serializable;

public class ReturnResult implements Serializable{

private static final long serialVersionUID = 1L;
private int returnCode = 0;
private Object returnObject;
private String faultString;

public int getReturnCode() {
return returnCode;
}

public void setReturnCode(int returnCode) {
this.returnCode = returnCode;
}

public Object getReturnObject() {
return returnObject;
}

public void setReturnObject(Object returnObject) {
this.returnObject = returnObject;
}

public String getFaultString() {
return faultString;
}

public void setFaultString(String faultString) {
this.faultString = faultString;
}
}




package palmcity.sketchmap.ws.base;

public class Person {
int userId;
String userName;
int age;

public int getUserId() {
return userId;
}

public void setUserId(int userId) {
this.userId = userId;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public int getAge() {
return age;
}

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





package palmcity.sketchmap.ws.common;

import java.util.ArrayList;
import java.util.List;

import palmcity.sketchmap.ws.base.Person;
import palmcity.sketchmap.ws.base.ReturnResult;

public class PersonManager {

public ReturnResult getPerson(int num){
List<Person> persons = new ArrayList<Person>();
for (int i = 1; i <= num; i++) {
Person person = new Person();
person.setUserId(i);
person.setUserName("人造人" + i + "号");
person.setAge(i * 10);

persons.add(person);
}

ReturnResult rr = new ReturnResult();
rr.setFaultString("faultString");
rr.setReturnObject(persons);

return rr;
}
}



自动生成WS后
soapUI 无法生成xml

请问如何解决


令:把Object变成List<Person>这个方法不能采纳
...全文
177 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dr_lou 2009-04-16
  • 打赏
  • 举报
回复
另问如何让xsd文件中的方法参数列表的name不是arg0 arg1 而是有意义的
dr_lou 2009-04-15
  • 打赏
  • 举报
回复
private List<HelloBeanClass> helloBeanClasses;

你把这个改成

private object helloBeanClasses; 试试


另 jax-ws 非 axis2
dr_lou 2009-04-15
  • 打赏
  • 举报
回复
我的returnresult如果改成 list<MapData> returnObject 就没有任何问题
但 他只能是 object
愤怒的月光 2009-04-15
  • 打赏
  • 举报
回复
public static void main(String[] args) {
try {
OMElement getPricePayload = getPricePayload();

Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

ServiceClient sender = new ServiceClient();
sender.setOptions(options);

OMElement result = sender.sendReceive(getPricePayload);
System.err.println(getResults(result));

} catch (Exception e) {
e.printStackTrace();
}
}
上面的result 就是从服务器端获得的xml格式的数据(也就是你要传输的对象)
System.err.println(getResults(result));
这个你可以改成List<HelloBean> list=getResults(result);
这样,对象就保存到了list里面
愤怒的月光 2009-04-15
  • 打赏
  • 举报
回复
楼主用什么开发的ws啊?如果你用axis2,如果要传递list等容器类的话需先把他封装成OMElement,这样才能传,下面一个和你问题类似的例子你可以参考下:

package aixs2listtest;

import java.util.*;
public class HelloBean {
private String name;
private int id;
private List<HelloBeanClass> helloBeanClasses;
public HelloBean(){}
public HelloBean(String name, int id ,List<HelloBeanClass> helloBeanClass){
this.name=name;
this.id=id;
this.helloBeanClasses=helloBeanClass;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return this.id;
}
public List<HelloBeanClass> getHelloBeanClass(){
return this.helloBeanClasses;
}
public void setHelloBeanClass(List<HelloBeanClass> helloBeanClass){
this.helloBeanClasses=helloBeanClass;
}

}


package aixs2listtest;

public class HelloBeanClass {
private int id;
private String className;

public HelloBeanClass(){}
public HelloBeanClass(int id, String className){
this.id=id;
this.className=className;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return this.id;
}

public void setClassName(String className){
this.className=className;
}
public String getClassName(){
return this.className;
}

}




package aixs2listtest;
import java.util.*;

import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.util.StreamWrapper;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axis2.databinding.utils.BeanUtil;
import javax.xml.namespace.QName;
public class HelloSource {
public OMElement echo(){
HelloBeanClass hbc1=new HelloBeanClass(11,"moonlight1");
HelloBeanClass hbc2=new HelloBeanClass(22,"moonlight2");
HelloBeanClass hbc3=new HelloBeanClass(33,"moonlight3");
List<HelloBeanClass> clss=new ArrayList<HelloBeanClass>();
clss.add(hbc1);clss.add(hbc2);clss.add(hbc3);
HelloBean hbs=new HelloBean("moon",1,clss);
HelloBean hbs2=new HelloBean("mo"+"\non2",2,clss);
HelloBean hbs3=new HelloBean("moon3",3,clss);
List<HelloBean> list = new ArrayList<HelloBean>();
list.add(hbs);
list.add(hbs2);
list.add(hbs3);
OMElement omElement = BeanUtil.getOMElement(new QName("HelloBeans"), list.toArray(), new QName("HelloBean"), false, null);

return omElement;
}
public static void main(String [] args){
HelloSource h=new HelloSource();
System.out.println("asd"+"\n"+"sdf");
h.echo();
}

}





package aixs2listtest;
import java.util.*;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.databinding.utils.BeanUtil;
import org.apache.axis2.engine.DefaultObjectSupplier;

public class StubTest {

private static EndpointReference targetEPR =
new EndpointReference("http://localhost:8080/axis2/services/HelloSource");

public static OMElement getPricePayload() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://hello/xsd", "tns");

OMElement method = fac.createOMElement("echo", omNs);
return method;
}


public static void main(String[] args) {
try {
OMElement getPricePayload = getPricePayload();

Options options = new Options();
options.setTo(targetEPR);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

ServiceClient sender = new ServiceClient();
sender.setOptions(options);

OMElement result = sender.sendReceive(getPricePayload);
System.err.println(getResults(result));

} catch (Exception e) {
e.printStackTrace();
}
}
private static List<HelloBean> getResults(OMElement element) throws AxisFault {
if (element == null) {
return null;
}
Iterator iterator = element.getChildElements();
List<HelloBean> list = new ArrayList<HelloBean>();
while (iterator.hasNext()) {
OMNode omNode = (OMNode) iterator.next();
if (omNode.getType() == OMNode.ELEMENT_NODE) {
OMElement omElement = (OMElement) omNode;
if (omElement.getLocalName().toLowerCase().equals("return")) {
HelloBean person = (HelloBean) BeanUtil.processObject(omElement,
HelloBean.class, null, true,
new DefaultObjectSupplier());
list.add(person);
}
}
}
return list;
}

}


services.xml
<service name="HelloSource" scope="application">
<description>
HelloSource
</description>
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">
aixs2listtest.HelloSource
</parameter>
</service>




以上文件编译后打成aar包的内容如下:

HelloSource/aixs2listtest/*.java
/META-INF/services.xml

Defonds 2009-04-15
  • 打赏
  • 举报
回复
帮你顶起
dr_lou 2009-04-15
  • 打赏
  • 举报
回复
SoapUI调用返回

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getPersonResponse xmlns:ns2="http://common.ws.sketchmap.palmcity/">
<return>
<faultString>faultString</faultString>
<returnCode>0</returnCode>
<returnObject xsi:type="ns2:arrayList" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</return>
</ns2:getPersonResponse>
</S:Body>
</S:Envelope>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧