首先我 写了一个操作数据库(我用的是mysql)的java类,里面有一些方法是直接返回一个结果集vector(比如:select * from goods_list),接着我使用axis 的java2wsdl将这个java类生成wsdl文件,然后用一个测试类根据wsdl文件来引用websevice,调用其中的返回结果集的方法,这时候问题就来了,数据库可以连接,但是就是不能返回结果集,取不到数据??我不知道为什么,请各位高手支支招!!!最好能以实例说明
解决方案 »
- Struts2 spring hibernate 集成大问题
- 关于路径问题
- JAVA里基于FTP上传用哪种啊?
- 关于TOMCAT中配置MYSQL连接池操作的问题
- action 把个List放在了Request中了怎样用jquery在前端把list中数据展现出来
- 2个问题,马上java考试要用的
- httpclient 包或代码怎么获得啊,
- 用java备份还原sql server数据库的问题
- eclipse + lomboz + jboss4.0 + Oracle9i 下开发cmp自动生成代码的问题
- 急,急,急,急,急的我在线等候!
- XFIRE 的 范型 映射与调用 急~~ 高手来
- 一个幼稚的问题
如果不行,尝试将Vector修改为数组。
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;
}}
Java code
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 XML code<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
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里面
首先,在web service部署端,修改server- config.wsdd文件,在具体的service配置,增加如下代码:
< beanMapping languageSpecificType= "java:com.hnisi.axis.Book" qname= "ns1:Book"
xmlns: ns1= "urn:BeanService" / >
languageSpecificType属性指定JavaBean类文件位置,qname属性指定JavaBean类的名字。当然,一个service可以绑定多个bean对象。
*************
QName qn = new QName("urn:BeanService" ,"Book" );
call.registerTypeMapping(Book.class , qn,
new BeanSerializerFactory(Book.class , qn),
new BeanDeserializerFactory(Book.class , qn));
这个事一个简单类的反序列和序列化相关配置。其中BeanSerializerFactory就是axis自带的。我也这几天在学,我刚学会了简单值对象的传递。你的那个数组应该是不需要序列化的。 你邮箱给我。,我给你发一份资料。你看着尝试一下。
3Q了哦