xfire的Client的WSDL调用

xfire的Client的WSDL调用

也只是想测试一下,如果只知道wsdl文件的情况下,用xfire的client如何调用WS呢。
在原来的基础上,改写了下easyserver,让它的get方法返回一个IUser类型:
public class IUser implements Serializable {
private static final long serialVersionUID = 1993559722178981779L;
private Integer id;
private String name;
private String email;
...
getter and setter
}
我的get调用的单元测试是这样的:
public void testGetUserFromWsdl() throws MalformedURLException, Exception {
Client client = new Client(new URL(
"http://localhost:8080/easyserver/services/UserService?wsdl"));
Object[] results = client.invoke("get", new Object[] {null});
System.out.println("results:" + results[0]);
Document xmlTree = (Document) results[0];
anylizeElement(xmlTree);
}
最初我查看这个results的时候,返现打印出来的results[0],就是一个null,如下字符串:
results:[#document: null]
有点茫然了,跑到easyserver上设置了断点,发现是正常调用了的,并且还成功返回了IUser对象,为啥这边是null呢。
后来在网上查找了一下资料,找到一个例子,也是遇到和我相同的情况,它使用了这个anylizeElement方法来解析xml从而得到了里面的返回值,他的anylizeElement方法如下:
private void anylizeElement(Document xmlTree) {
Element element = xmlTree.getDocumentElement();
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
System.out.print("NodeName:" + node.getNodeName());
System.out.println("\tNodeValue:" + node.getNodeValue());
stepThrough(node);
}
}
private void stepThrough(Node start) {
for (Node child = start.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child instanceof Node)// 去除多余的空白
{
System.out.print("NodeName:" + child.getNodeName());
System.out.println("\tNodeValue:" + child.getNodeValue());
}
if (child != null)
stepThrough(child);
}
}
其中用到的包和类是:
import org.codehaus.xfire.client.Client;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
单元测试打印出的效果如下:
results:[#document: null]
NodeName:email NodeValue:null
NodeName:#text NodeValue:luohua@126.com
NodeName:id NodeValue:null
NodeName:#text NodeValue:1
NodeName:name NodeValue:null
NodeName:#text NodeValue:luohua

看来通过wsdl倒是立马就可以调用WS了,不过返回的这个XML倒的确比较难过。比起以前的通过接口去调用,或者spring注入BEAN的方法,都要显得笨些。不知道有没有合适的类,可以将这个XML转换为我们的IUser呢。不过client又没有IUser类。呵呵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值