0 0

java 如何提供xml接口0

有一个需求,web 必须提供xml的结果(接口),大家都是怎么做的?是写好xml文件,然后替换xml的结果吗?
或者是拼凑xml然后输出?这个好像很不专业。
XML 
2013年9月02日 23:18

5个答案 按时间排序 按投票排序

0 0

采纳的答案

直接有对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
0 0

XStream

2013年9月03日 17:41
0 0

可以用jaxb

2013年9月03日 14:38
0 0

现在流行用json。

2013年9月03日 09:06
0 0

可以参考我写的基础开发平台解决方案:

https://git.oschina.net/fand/fand/blob/master/modules/fand-context/src/main/java/com/fand/context/mapper/JaxbMapper.java

2013年9月03日 05:49

相关推荐

    java http 发送xml报文(java发送xml报文实例+参数)

    首先,我们需要引入Java的HttpURLConnection类,这是Java标准库提供的HTTP客户端接口。发送XML报文通常涉及到POST或GET请求,这里以POST请求为例,因为POST更适合发送大量数据,如XML文档。 1. **创建XML文档** 在...

    Java and XML(英文第三版)_java_xml_birdsolc_源码

    4. **JAXP(Java API for XML Processing)**:JAXP提供了XML解析和转换的接口,支持DOM、SAX和XSLT,是Java平台上处理XML的基础。 5. **XPath**:XPath是用于在XML文档中查找信息的语言,它可以根据表达式选取节点...

    java导入导出xml文件

    Java提供了多种解析器,如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM解析器将整个XML文档加载到内存中的树形结构,方便遍历和修改;SAX是事件驱动的解析器,...

    Java and XML, 3rd Edition

    它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点在内的所有信息提供一条全新的途径。 本书的前两章回顾有关XML的基础知识,包括XPath、XSL、DTD...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    java xml.java操作XML文档

    Java的`javax.xml.xpath.XPath`接口支持XPath表达式的执行。 8. XSLT: 是一种转换XML文档的语言,使用`javax.xml.transform.TransformerFactory`和`javax.xml.transform.Source`可以实现XSLT转换。 通过这些API,...

    JAVA调用webservice并解析xml

    Java提供了DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析器来处理XML。DOM加载整个XML文档到内存,适合小型数据;SAX是事件驱动,只读且不需要全部加载;StAX允许...

    Java,XML和Web服务宝典 Java,XML和Web服务宝典 Java,XML和Web服务宝典

    这本"Java,XML和Web服务宝典"显然涵盖了这三个主题的重要知识点,旨在为开发者提供全面的指导。 首先,Java是全球最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。Java以其“一次编写,到处运行”的...

    java http 发送xml报文

    ### 二、Java发送XML报文的实现 在给定的代码片段中,我们看到一个名为`TestHttp`的类,其中包含了一个名为`testRegist`的方法,该方法实现了通过HTTP POST请求发送XML报文的功能。 #### 代码解析 - **创建XML字符...

    java_xml_api,java操作XML文档

    Java XML API是Java平台提供的一套用于处理XML文档的接口和类,它使得开发者能够方便地在Java程序中创建、解析、修改XML文档。本文将深入探讨Java XML API中的核心组件,包括SAX(Simple API for XML)、DOM...

    用java读取xml文件的四种方法

    使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口可以实现DOM解析。 ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder ...

    Java 使用Tcpip 发送XML文件

    本项目关注的是如何使用Java通过TCP/IP协议发送XML文件。TCP/IP(Transmission Control Protocol/Internet Protocol)是一种通信协议,是互联网的基础,确保数据在不同网络间的可靠传输。 首先,我们需要了解Java中...

    java and xml 3rd edition

    5. **JDOM**:讨论另一种Java XML处理库JDOM,它提供了一种更面向Java的XML处理模型,简化了XML操作。 6. **XPath和XSLT**:介绍XPath语言用于查询XML文档中的节点,以及XSLT用于转换XML文档为其他格式(如HTML或...

    用Java数字签名提供XML安全.doc

    【Java数字签名提供XML安全】 XML(eXtensible Markup Language)作为一种标准的数据交换格式,在软件开发和数据传输中扮演着重要角色。然而,随着XML的广泛应用,数据的安全性问题日益凸显。为了确保XML文件的完整...

    java调用soap接口案例

    Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...

    JAVA与XML程序开发

    综上所述,Java与XML的结合使用在现代软件开发中占据重要地位,无论是在数据交换、服务接口、配置管理还是对象序列化等方面都有广泛应用。掌握这两者的结合应用,对于提升开发效率和构建高质量的软件系统至关重要。

    用java读取修改xml文件的代码实现

    使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来实现。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;...

    JAVA与XML.rar

    它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点在内的所有信息提供一条全新的途径。 本书的前两章回顾有关XML的基础知识,包括XPath、XSL、DTD以及...

    如何在Java中将XML文档转换成HTML文档.pdf

    1. **导入相关包**:在Java程序中使用XSLT进行转换前,需要导入必要的包,如`javax.xml.transform`、`javax.xml.transform.stream`和`javax.xml.transform.dom`等,这些包提供了执行XSLT转换所需的类和接口。...

    Java解析xml所需jar包

    dom4j是一个非常灵活且功能丰富的Java XML API,它提供了对DOM(文档对象模型),SAX(简单API for XML)和JDOM的支持。dom4j的核心特性包括: 1. **DOM解析器**: 支持W3C DOM Level 2接口,允许开发者以树形结构...

Global site tag (gtag.js) - Google Analytics