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 jaxbPerson = new JAXBElement(q, Person.class, user);
                        Marshaller m = context.createMarshaller();
                        StringWriter sw = new StringWriter();
                        m.marshal(jaxbPerson, sw);
                         // 输出转换后的XML代码
                        System.out.println(sw.toString());

              3、转换结果如下:

               

                         

                                 123

                                zc

                               

                         

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

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

你可能感兴趣的:(WebService)