JAXB生成XML不需要加@XmlRootElement注解的方法

            在解决平台里一个万能动态webserivce客户端时,中间涉及到将一个java对象转成XML的过程,其中网上很多资料说使用JAXB将java转成XML必须要在java对象上加@XmlRootElement注解,这个让开发者添加个注解的确不费劲,但是总是不甘心,凭什么没有这个注解就不行?这个问题要解决的关键突破点就是搞明白@XmlRootElement注解的作用到底是什么就行了,但是我这边时间紧迫,而且网上很多资料对这个说的也是是是而非,因此打算放到以后再去研究。可是当前问题如何解决呢?最后查了老外的一些文档,找了个新办法,这里先记下来。

            1、java对象如下,注意没有加那个@XmlRootElement注解

             package serivce;
             public class Person {
             private String id;
             private String name;
             private String sex;


             public String getId() {
            return id;
             }

            public void setId(String id) {
            this.id = id;
             }

            public String getName() {
            return name;
            }

            public void setName(String name) {
            this.name = name;
            }

            public String getSex() {
            return sex;
            }

           public void setSex(String sex) {
            this.sex = sex;
            }
            }

            2、测试代码如下:

              Person user = new Person();
        user.setId("123");
        user.setName("zc");
        user.setSex("女");
         // 创建JAXB上下文
                        JAXBContext context = JAXBContext.newInstance(user.getClass());
                        // 创建QName,这个是关键,有了这个就不要使用@XmlRootElement注解了,关于QName的资料大家自己网上找,这里不赘述
                        QName q = new QName("http://ws.test.com","Person");
                       JAXBElement<Person> jaxbPerson = new JAXBElement<Person>(q, Person.class, user);
                        Marshaller m = context.createMarshaller();
                        StringWriter sw = new StringWriter();
                        m.marshal(jaxbPerson, sw);
                         // 输出转换后的XML代码
                        System.out.println(sw.toString());

              3、转换结果如下:

               <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

                          <ns2:Person xmlns:ns2="http://ws.test.com">

                                 <id>123</id>

                                <name>zc</name>

                                <sex>女</sex>

                         </ns2:Person>

         这个本身技术含量不大,但是由于国人对webservice等的使用只停留在基本API的层次上,而对底层的实现原理和细节关注甚少,所以网上关于webserivce稍微深入点的资料少之又少,更多的是Demo级别的资料,我之前找了很久也没有找到,要深入了解webserivce,其中的JAXB和SOAP协议是避不开的,我们使用的webservice的API也是封装了这些细节而已。这里写下来给网友分享下,希望能解决下大家的问题。

         附JAXB学习网站,虽然是英文的,但是觉得很好用:点击打开链接

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值