-
java 如何提供xml接口0
有一个需求,web 必须提供xml的结果(接口),大家都是怎么做的?是写好xml文件,然后替换xml的结果吗?
或者是拼凑xml然后输出?这个好像很不专业。
2013年9月02日 23:18
5个答案 按时间排序 按投票排序
-
采纳的答案
直接有对bean2xml的工具
package com.fand.context.mapper; import java.io.StringReader; import java.io.StringWriter; import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.namespace.QName; import org.apache.commons.lang.StringUtils; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.util.Assert; import com.google.common.base.Throwables; /** * 使用Jaxb2.0实现XML<->Java Object的Mapper. 在创建时需要设定所有需要序列化的Root对象的Class. * 特别支持Root对象是Collection的情形. * * @author yaoHT */ public class JaxbMapper { /** * 封装Root Element 是 Collection的情况. */ public static class CollectionWrapper { @XmlAnyElement private Collection<?> collection; } private static ConcurrentMap<Class<?>, JAXBContext> jaxbContexts = new ConcurrentHashMap<Class<?>, JAXBContext>(); /** * 创建Marshaller并设定encoding(可为null). 线程不安全,需要每次创建或pooling。 */ public static Marshaller createMarshaller(final Class<?> clazz, final String encoding) { try { final JAXBContext jaxbContext = JaxbMapper.getJaxbContext(clazz); final Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); if (StringUtils.isNotBlank(encoding)) { marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); } return marshaller; } catch (final JAXBException e) { throw new RuntimeException(Throwables.getStackTraceAsString(e)); } } /** * 创建UnMarshaller. 线程不安全,需要每次创建或pooling。 */ public static Unmarshaller createUnmarshaller(final Class<?> clazz) { try { final JAXBContext jaxbContext = JaxbMapper.getJaxbContext(clazz); return jaxbContext.createUnmarshaller(); } catch (final JAXBException e) { throw new RuntimeException(Throwables.getStackTraceAsString(e)); } } /** * Xml->Java Object. */ @SuppressWarnings("unchecked") public static <T> T fromXml(final String xml, final Class<T> clazz) { try { final StringReader reader = new StringReader(xml); return (T) JaxbMapper.createUnmarshaller(clazz).unmarshal(reader); } catch (final JAXBException e) { throw new RuntimeException(Throwables.getStackTraceAsString(e)); } } private static JAXBContext getJaxbContext(final Class<?> clazz) { Assert.notNull(clazz, "'clazz' must not be null"); JAXBContext jaxbContext = JaxbMapper.jaxbContexts.get(clazz); if (jaxbContext == null) { try { jaxbContext = JAXBContext.newInstance(clazz, CollectionWrapper.class); JaxbMapper.jaxbContexts.putIfAbsent(clazz, jaxbContext); } catch (final JAXBException ex) { throw new HttpMessageConversionException("Could not instantiate JAXBContext for class [" + clazz + "]: " + ex.getMessage(), ex); } } return jaxbContext; } /** * Java Collection->Xml without encoding, 特别支持Root Element是Collection的情形. */ public static String toXml(final Collection<?> root, final String rootName, final Class<?> clazz) { return JaxbMapper.toXml(root, rootName, clazz, null); } /** * Java Collection->Xml with encoding, 特别支持Root Element是Collection的情形. */ public static String toXml(final Collection<?> root, final String rootName, final Class<?> clazz, final String encoding) { try { final CollectionWrapper wrapper = new CollectionWrapper(); wrapper.collection = root; final JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(new QName( rootName), CollectionWrapper.class, wrapper); final StringWriter writer = new StringWriter(); JaxbMapper.createMarshaller(clazz, encoding).marshal(wrapperElement, writer); return writer.toString(); } catch (final JAXBException e) { throw new RuntimeException(Throwables.getStackTraceAsString(e)); } } /** * Java Object->Xml without encoding. */ public static String toXml(final Object root) { final Class<?> clazz = root.getClass(); return JaxbMapper.toXml(root, clazz, null); } /** * Java Object->Xml with encoding. */ public static String toXml(final Object root, final Class<?> clazz, final String encoding) { try { final StringWriter writer = new StringWriter(); JaxbMapper.createMarshaller(clazz, encoding).marshal(root, writer); return writer.toString(); } catch (final JAXBException e) { throw new RuntimeException(Throwables.getStackTraceAsString(e)); } } /** * Java Object->Xml with encoding. */ public static String toXml(final Object root, final String encoding) { final Class<?> clazz = root.getClass(); return JaxbMapper.toXml(root, clazz, encoding); } }
2013年9月03日 05:47
-
可以参考我写的基础开发平台解决方案:
https://git.oschina.net/fand/fand/blob/master/modules/fand-context/src/main/java/com/fand/context/mapper/JaxbMapper.java2013年9月03日 05:49
相关推荐
首先,我们需要引入Java的HttpURLConnection类,这是Java标准库提供的HTTP客户端接口。发送XML报文通常涉及到POST或GET请求,这里以POST请求为例,因为POST更适合发送大量数据,如XML文档。 1. **创建XML文档** 在...
4. **JAXP(Java API for XML Processing)**:JAXP提供了XML解析和转换的接口,支持DOM、SAX和XSLT,是Java平台上处理XML的基础。 5. **XPath**:XPath是用于在XML文档中查找信息的语言,它可以根据表达式选取节点...
Java提供了多种解析器,如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM解析器将整个XML文档加载到内存中的树形结构,方便遍历和修改;SAX是事件驱动的解析器,...
它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点在内的所有信息提供一条全新的途径。 本书的前两章回顾有关XML的基础知识,包括XPath、XSL、DTD...
Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...
Java的`javax.xml.xpath.XPath`接口支持XPath表达式的执行。 8. XSLT: 是一种转换XML文档的语言,使用`javax.xml.transform.TransformerFactory`和`javax.xml.transform.Source`可以实现XSLT转换。 通过这些API,...
Java提供了DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析器来处理XML。DOM加载整个XML文档到内存,适合小型数据;SAX是事件驱动,只读且不需要全部加载;StAX允许...
这本"Java,XML和Web服务宝典"显然涵盖了这三个主题的重要知识点,旨在为开发者提供全面的指导。 首先,Java是全球最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。Java以其“一次编写,到处运行”的...
### 二、Java发送XML报文的实现 在给定的代码片段中,我们看到一个名为`TestHttp`的类,其中包含了一个名为`testRegist`的方法,该方法实现了通过HTTP POST请求发送XML报文的功能。 #### 代码解析 - **创建XML字符...
Java XML API是Java平台提供的一套用于处理XML文档的接口和类,它使得开发者能够方便地在Java程序中创建、解析、修改XML文档。本文将深入探讨Java XML API中的核心组件,包括SAX(Simple API for XML)、DOM...
使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口可以实现DOM解析。 ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder ...
本项目关注的是如何使用Java通过TCP/IP协议发送XML文件。TCP/IP(Transmission Control Protocol/Internet Protocol)是一种通信协议,是互联网的基础,确保数据在不同网络间的可靠传输。 首先,我们需要了解Java中...
5. **JDOM**:讨论另一种Java XML处理库JDOM,它提供了一种更面向Java的XML处理模型,简化了XML操作。 6. **XPath和XSLT**:介绍XPath语言用于查询XML文档中的节点,以及XSLT用于转换XML文档为其他格式(如HTML或...
【Java数字签名提供XML安全】 XML(eXtensible Markup Language)作为一种标准的数据交换格式,在软件开发和数据传输中扮演着重要角色。然而,随着XML的广泛应用,数据的安全性问题日益凸显。为了确保XML文件的完整...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
综上所述,Java与XML的结合使用在现代软件开发中占据重要地位,无论是在数据交换、服务接口、配置管理还是对象序列化等方面都有广泛应用。掌握这两者的结合应用,对于提升开发效率和构建高质量的软件系统至关重要。
使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来实现。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;...
它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点在内的所有信息提供一条全新的途径。 本书的前两章回顾有关XML的基础知识,包括XPath、XSL、DTD以及...
1. **导入相关包**:在Java程序中使用XSLT进行转换前,需要导入必要的包,如`javax.xml.transform`、`javax.xml.transform.stream`和`javax.xml.transform.dom`等,这些包提供了执行XSLT转换所需的类和接口。...
dom4j是一个非常灵活且功能丰富的Java XML API,它提供了对DOM(文档对象模型),SAX(简单API for XML)和JDOM的支持。dom4j的核心特性包括: 1. **DOM解析器**: 支持W3C DOM Level 2接口,允许开发者以树形结构...