最近在学习用XFire开发webService,遇到点问题请大帮我看看,谢谢
Client主要代码:
                helloClient client = new helloClient();
helloPortType port = client.gethelloHttpPort();
User u = new User();
JAXBElement<String> name = new JAXBElement<String>(new QName("http://service.test.com","value"),String.class,"张三");
u.setName(name);
                //u.getName().getValue();//这句话在这里不会报错,但到服务器上后就出错了,传过去的u不为空,但u.getName()返回空
System.out.println(port.example(u));接口实现类主要代码:
public String example(User u) {
    return u.getName().getValue();
            //问题就在这里,传过来的u是不为空的,但u.getName()时返回就为空了,而u.getName().getValue将会报错
                道底是哪出错了???
}aegis.xml:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<method name="example">
<parameter index="0" componentType="com.test.service.User" />
</method>
</mapping>
</mappings>
会的朋友请教教我,谢谢了!!!

解决方案 »

  1.   

    直接返回u.getName(),值为空,而且这样根本取不到值,因为它是JAXBElement<String>
      

  2.   

    用u.getName().getValue()试试。
      

  3.   

    用u.getName().getValue()试试。正解
      

  4.   

    你的错误在于,QName的参数给的不对
    在你生成客户端自定义对象的时候,属性的上面有网络空间uri和别名的值,填对了就可以了
      

  5.   

    比如生成的客户端User对象的name属性是这样写的
     @XmlElementRef(name = "name", namespace = "http://bean", type = JAXBElement.class)
       protected JAXBElement<String> name;
    那么你的QName对象必须这样创建
    new QName("http://bean","name");
      

  6.   

    比如生成的客户端User对象的name属性是这样写的
     @XmlElementRef(name = "name", namespace = "http://bean", type = JAXBElement.class)
      protected JAXBElement<String> name;
    那么你的QName对象必须这样创建
    new QName("http://bean","name");
    这个太OK了,非常感谢
      

  7.   

    chongchong0108,发觉你04年就提交了这个问题,哈哈。我对其他帖子有回复过。希望帮上忙http://topic.csdn.net/u/20090410/21/c7cf6452-6443-4574-a138-48e37946798a.html。
    我的邮件[email protected]