`

利用jaxb将XML转化为POJO

阅读更多
  在Java client中对restful webservice发送http post请求,将得到的请求转化为java pojo。
  restful ws返回信息格式为
 <RequestPhysicalInventoryPollingMessage> 
 <interval>int</interval> 
 <from>String</from> 
 <to>String</to> 
 <pollingurl> 
   String
 </pollingurl> 
 </RequestPhysicalInventoryPollingMessage> 
 


  那么为了将这个xml转化为POJO,需要先创建这个POJO类:
package com.client.jaxb;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "RequestPhysicalInventoryPollingMessage")
public class RequestPhysicalInventoryPollingMessage {
	String interval;
	String from;
	String to;
	String pollingurl;

	public RequestPhysicalInventoryPollingMessage() {
		interval = "c";
		from = "a";
		to = "b";
	}

	public String getInterval() {
		return interval;
	}

	public void setInterval(String interval) {
		this.interval = interval;
	}

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getTo() {
		return to;
	}

	public void setTo(String to) {
		this.to = to;

	}

	public String getPollingurl() {
		return pollingurl;
	}

	public void setPollingurl(String pollingurl) {
		this.pollingurl = pollingurl;
	}

}


只需要在定义类的前面注明@XmlRootElement(name = "RequestPhysicalInventoryPollingMessage")
如果在每个属性前面加@XmlAttribute,则会报错。

package com.client.jaxb;

import java.io.ByteArrayInputStream;
import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

import com.client.RequestPhysicalInventoryPollingMessage;

public final class Client {

	private Client() {
	}

	public static void main(String args[]) throws Exception {
		//read the request payload
		File input = new File(
				"/RequestPhysicalInventory_FLOW_PIPeR_MPI3.1.xml");
		//set the uri which we will send request and the http method is post
		PostMethod post = new PostMethod(
				"http://10.10.27.74:7001/ManagePhysicalInventoryConsumerProject/ManagePhysicalInventoryConsumerProxyService ");
		post.addRequestHeader("Accept", "text/xml");
		RequestEntity entity = new FileRequestEntity(input, "text/xml; charset=ISO-8859-1");
		post.setRequestEntity(entity);
		HttpClient httpclient = new HttpClient();
		//execute the post method and get the response status code
		int result = httpclient.executeMethod(post);
		System.out.println("Response status code: " + result);
		System.out.println("Response body: ");
		//print the body of response
		System.out.println(post.getResponseBodyAsString());

		//invoke the method to convert the xml to a pojo
		RequestPhysicalInventoryPollingMessage message = xml2pojo(post
				.getResponseBodyAsString());
		System.out.println("interval:" + message.getInterval());
		System.out.println("from:" + message.getFrom());
		System.out.println("to:" + message.getTo());
		System.out.println("pollinguri:" + message.getPollingurl());
	}
	//convert the xml to a pojo
	public static RequestPhysicalInventoryPollingMessage xml2pojo(String xml)
			throws JAXBException {
		JAXBContext jaxbContext;
		//set the pojo in a new instance of JaxbContext
		jaxbContext = JAXBContext
				.newInstance(RequestPhysicalInventoryPollingMessage.class);
		
		Unmarshaller um = jaxbContext.createUnmarshaller();
		ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes());
		/*
		 * this method has no parameter as String,so we must get the bytes from a String,and create a ByteArrayInputStream
		 * by the bytes.
		 */
		RequestPhysicalInventoryPollingMessage message = (RequestPhysicalInventoryPollingMessage) um
				.unmarshal(is);
		return message;
	}

}


因为英语很烂,不知道用英语写的注释有没有写错。。。中文重新说明下:
RequestPhysicalInventoryPollingMessage message = (RequestPhysicalInventoryPollingMessage) um
.unmarshal(is);
这个方法:unmarshal() ,他不能接受String类型的参数(个人很不理解,为什么jaxb不去实现简单的把xml写在String中的POJO转化)。所以如果现在有一个String,内容是xml,就必须先调用这个String的getBytes()方法,然后用得到的byte[]去创建一个ByteArrayInputStream。然后把这个InputStream作为参数调用unmarshal().

执行代码结果如下:
Response status code: 200
Response body: 
<?xml version="1.0" encoding="UTF-8"?>
<RequestPhysicalInventoryPollingMessage><interval>-1</interval><from>http://www.altova.com</from><to>http://www.altova.com</to><pollingurl>http://10.10.27.74:7001/ManagePhysicalInventoryConsumerProject/ManagePhysicalInventoryConsumerProxyService/String</pollingurl></RequestPhysicalInventoryPollingMessage>
interval:-1
from:http://www.altova.com
to:http://www.altova.com
pollinguri:http://10.10.27.74:7001/ManagePhysicalInventoryConsumerProject/ManagePhysicalInventoryConsumerProxyService/String


 
1
0
分享到:
评论

相关推荐

    jaxb for xjc 命令 实体类生成工具

    总的来说,JAXB和XJC是Java开发者处理XML数据的强大工具,它们将XML Schema和Java对象之间复杂的数据转换过程自动化,提高了开发效率,并且由于其标准性,广泛应用于各种Java项目中。通过学习和熟练掌握这些工具,...

    根据实体mode导入导出xml

    - 这个过程通常涉及XML解析,使用如JAXB(Java Architecture for XML Binding)或者DOM(Document Object Model)解析器将XML文档转化为Java对象。 - JAXB允许开发者通过注解将XML Schema与Java类绑定,实现XML到...

    jackson-dataformat-xml:Jackson JSON处理器的扩展,增加了对将POJO序列化为XML(以及从XML反序列化)的支持,以替代JSON

    尽管XML序列化在理想情况下应该类似于JAXB输出,但偏差不一定被视为错误-我们会尽力而为 应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是进行完整的XML序列化。 从上面开始:...

    json、javaBean、xml互转的几种工具介绍

    对于XML转换,Jackson有一个名为`JAXB`的模块,可以处理XML与Java对象之间的转换。 3. **JAXB (Java Architecture for XML Binding)** JAXB是Java SE的一部分,用于将Java对象绑定到XML。它支持XML到JavaBean的...

    java读取XML内容(源代码)

    在这个例子中,我们首先创建一个`JAXBContext`实例,然后使用它创建一个`Unmarshaller`,通过`unmarshal`方法将XML文件转换为Java对象。 总结: 以上就是使用Java读取XML内容的三种常见方式:DOM、SAX和JAXB。每种...

    spring O/X 映射

    它的目的是在 Java 对象(几乎总是一个 plain old Java object,或简写为 POJO)和 XML 文档之间来回转换。 例如,您可能有一个带有几个属性的简单 bean,且您的业务需要将那个 Java 对象转换为一个 XML 文档。...

    eclipse中castor插件

    - 序列化和反序列化:使用Castor提供的API,可以将Java对象转换为XML字符串,或将XML文档解析为Java对象。 4. **使用Castor进行数据绑定的优势**: - 提高开发效率:通过自动化的映射,减少了手动处理XML数据的...

    apache-cxf-2.4.2.zip

    CXF提供了工具将这些接口转换为WSDL(Web服务描述语言),反之亦然,使得开发过程更为灵活。 在配合Ant使用时,Apache Ant是一个Java库和命令行工具,用于构建和管理Java项目。Ant使用XML来描述构建过程和依赖关系...

    jdk 1.6 支持架构文件直接生成po对象

    JAXB允许Java程序与XML数据进行交互,将XML文档转换为Java对象,反之亦然。`xjc`可以读取XSD文件,根据其中定义的数据结构生成对应的Java类。 使用`xjc`的步骤大致如下: 1. 首先,你需要一个符合规范的XSD文件,它...

    The Java™ Web Services Tutorial

    3. **绑定 XML 数据**:使用 JAXB 将订单信息 XML 数据转换为 Java 对象,便于处理。 4. **安全性和性能优化**:实现 SSL/TLS 加密通信以确保数据传输的安全性;通过缓存机制提高服务响应速度。 #### 六、总结 ...

    JAX WebService开发

    3. **POJO到Web服务的转换**:JAX-WS支持通过注解将传统的Java对象(POJOs)直接转换为Web服务,极大地加速了开发流程。同时,它还规定了如何将WSDL定义的服务精确映射到实现这些服务的Java类上,即使是复杂的WSDL...

    从Java走向Java+EE+.rar

    20.2 实例——利用EJB转换字符串 301 20.3 小结 307 第21章 Web Service 308 21.1 Web Service基础 308 21.2 实例——利用AXIS开发一个简单的Web Service 310 21.3 小结 314 第22章 Java EE的安全 315 ...

    springmvc-jackson-jar包集合

    反之,当需要返回JSON响应时,也会利用`ObjectMapper`将Java对象转化为JSON。 四、优化JSON处理 为了提高性能和灵活性,开发者还可以通过以下方式优化Spring MVC与Jackson的配合: 1. 配置`ObjectMapper`:通过`...

    XFire开发指南,很详细的书

    - **Castor绑定**:利用Castor工具将XML转换为Java对象。 - **JiBX绑定**:轻量级的XML绑定解决方案。 - **MessageBinding**:自定义消息绑定逻辑。 #### 五、高级特性 - **身份验证**:实现安全的身份验证机制,...

    webservice cxf包

    CXF也支持多种传输协议和数据绑定机制,例如HTTP、HTTPS、JMS等,以及JAXB(Java Architecture for XML Binding)和XMLBeans等数据绑定技术,可以将XML文档转换为Java对象,反之亦然。此外,CXF还集成了Spring框架,...

    jackson-jar

    基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, ...

    JAVAEE5API

    10. **JAXB (Java Architecture for XML Binding)**: JAXB提供了一种将Java对象转换为XML和反向转换的机制,简化了XML数据的处理。 JAVAEE5 API的CHM格式文件为开发者提供了一种快速查询和查阅这些API的方法。通过...

Global site tag (gtag.js) - Google Analytics