在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
分享到:
相关推荐
总的来说,JAXB和XJC是Java开发者处理XML数据的强大工具,它们将XML Schema和Java对象之间复杂的数据转换过程自动化,提高了开发效率,并且由于其标准性,广泛应用于各种Java项目中。通过学习和熟练掌握这些工具,...
- 这个过程通常涉及XML解析,使用如JAXB(Java Architecture for XML Binding)或者DOM(Document Object Model)解析器将XML文档转化为Java对象。 - JAXB允许开发者通过注解将XML Schema与Java类绑定,实现XML到...
尽管XML序列化在理想情况下应该类似于JAXB输出,但偏差不一定被视为错误-我们会尽力而为 应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是进行完整的XML序列化。 从上面开始:...
对于XML转换,Jackson有一个名为`JAXB`的模块,可以处理XML与Java对象之间的转换。 3. **JAXB (Java Architecture for XML Binding)** JAXB是Java SE的一部分,用于将Java对象绑定到XML。它支持XML到JavaBean的...
在这个例子中,我们首先创建一个`JAXBContext`实例,然后使用它创建一个`Unmarshaller`,通过`unmarshal`方法将XML文件转换为Java对象。 总结: 以上就是使用Java读取XML内容的三种常见方式:DOM、SAX和JAXB。每种...
它的目的是在 Java 对象(几乎总是一个 plain old Java object,或简写为 POJO)和 XML 文档之间来回转换。 例如,您可能有一个带有几个属性的简单 bean,且您的业务需要将那个 Java 对象转换为一个 XML 文档。...
- 序列化和反序列化:使用Castor提供的API,可以将Java对象转换为XML字符串,或将XML文档解析为Java对象。 4. **使用Castor进行数据绑定的优势**: - 提高开发效率:通过自动化的映射,减少了手动处理XML数据的...
Web Service 就是 WEB 服务,能够将应用程序转换为网络应用程序。开发商只提供一个服务的接口,其他应用程序调用这个接口就可以使用这个服务。Web Service 能够实现异构平台的交互。 Web Service 架构 Web Service...
CXF提供了工具将这些接口转换为WSDL(Web服务描述语言),反之亦然,使得开发过程更为灵活。 在配合Ant使用时,Apache Ant是一个Java库和命令行工具,用于构建和管理Java项目。Ant使用XML来描述构建过程和依赖关系...
JAXB允许Java程序与XML数据进行交互,将XML文档转换为Java对象,反之亦然。`xjc`可以读取XSD文件,根据其中定义的数据结构生成对应的Java类。 使用`xjc`的步骤大致如下: 1. 首先,你需要一个符合规范的XSD文件,它...
3. **绑定 XML 数据**:使用 JAXB 将订单信息 XML 数据转换为 Java 对象,便于处理。 4. **安全性和性能优化**:实现 SSL/TLS 加密通信以确保数据传输的安全性;通过缓存机制提高服务响应速度。 #### 六、总结 ...
3. **POJO到Web服务的转换**:JAX-WS支持通过注解将传统的Java对象(POJOs)直接转换为Web服务,极大地加速了开发流程。同时,它还规定了如何将WSDL定义的服务精确映射到实现这些服务的Java类上,即使是复杂的WSDL...
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 ...
反之,当需要返回JSON响应时,也会利用`ObjectMapper`将Java对象转化为JSON。 四、优化JSON处理 为了提高性能和灵活性,开发者还可以通过以下方式优化Spring MVC与Jackson的配合: 1. 配置`ObjectMapper`:通过`...
- **Castor绑定**:利用Castor工具将XML转换为Java对象。 - **JiBX绑定**:轻量级的XML绑定解决方案。 - **MessageBinding**:自定义消息绑定逻辑。 #### 五、高级特性 - **身份验证**:实现安全的身份验证机制,...
CXF也支持多种传输协议和数据绑定机制,例如HTTP、HTTPS、JMS等,以及JAXB(Java Architecture for XML Binding)和XMLBeans等数据绑定技术,可以将XML文档转换为Java对象,反之亦然。此外,CXF还集成了Spring框架,...
基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, ...
10. **JAXB (Java Architecture for XML Binding)**: JAXB提供了一种将Java对象转换为XML和反向转换的机制,简化了XML数据的处理。 JAVAEE5 API的CHM格式文件为开发者提供了一种快速查询和查阅这些API的方法。通过...
这些技术将XML消息自动转换为Java对象,反之亦然。 4. **传输与编码**:CXF允许选择不同的传输方式,如HTTP、HTTPS、JMS等,同时支持多种消息编码,如SOAP、XML/HTTP、MTOM(Message Transmission Optimization ...