jaxb编组时出现javax.xml.bind.PropertyException

bunion92

我试图将对象列表编组为xml。方法如下:

import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
import javax.xml.bind.Marshaller;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;

public class ItemMarshaller
{
    public String marshallItems(final List<Items> items)
    {
        try
        {
            final JAXBContext context = JAXBContext.newInstance("com.project.jaxb.items");
            final Marshaller m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

            m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper()
            {
                @Override
                public String getPreferredPrefix(String uri, String suggestion, boolean requirePrefix)
                {
                    return "";
                }
            });

            final StringWriter writer = new StringWriter();
            m.marshal(items, writer);

            return writer.toString();
        }
        catch (final JAXBException e)
        {
            ErrorLogger.LOGGER.error("Marshalling failed.", e); //$NON-NLS-1$
        }

        return null;
    }
}

当我调用m.setProperty(“ com.sun.xml.bind.namespacePrefixMapper”,新的NamespacePrefixMapper()时,出现以下错误:

javax.xml.bind.PropertyException: name: com.sun.xml.bind.namespacePrefixMapper value: com.project.ItemMarshaller$1@eb6e072
at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractMarshallerImpl.java:358)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:527)

现在,如果我使用内部类:com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;

相反,它可以工作。但是,该项目将使用Maven构建,并且在您依赖内部类时会抱怨。使用内部类也是一个坏主意,或者有人告诉我。

我怎样才能解决这个问题?

gifpif

选项1:使用package-info.java文件中的注释代替NamespacePrefixMapper类:

@javax.xml.bind.annotation.XmlSchema(
        namespace = "http://www.example.com/schema/impl", 
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
        xmlns={@XmlNs(prefix="ns0", namespaceURI="http://www.example.com/schema/impl")}
    )
package com.abc.schema.impl;

选项2:在Maven中,我添加了以下构建依赖项:

<!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.4-1</version>
</dependency>

这使您可以使用com.sun.xml.bind.marshaller.NamespacePrefixMapper。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

线程“主”中的异常javax.xml.bind.PropertyException:名称:eclipselink.media-type值:application / json

Jaxb编组setproperty XSLT抛出PropertyException

javax/xml/bind/JAXBException

Gradle JAXB WSDL任务失败,并出现java.lang.NoClassDefFoundError:javax / xml / bind / JAXBContext

接受 SDK 许可时出现“java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema”

尝试使用JAXB将对象编组为xml文件时,出现“缺少@XmlRootElement批注”错误

ClassNotFoundException:javax.xml.bind.JAXBException(再次)

用gradle构建javax / xml / bind / JAXBException

NoClassDefFoundError:javax.xml.bind.DatatypeConverter

CXF中的javax.xml.bind.UnmarshalException

javax.xml.bind无法解析

javax.xml.bind.JAXBException在模块路径或类路径上找不到JAXB-API的实现

JaxB Unmarshal异常:javax.xml.bind.UnmarshalException:意外元素。我哪里出问题了?

JAXB封送处理异常;嵌套的异常是javax.xml.bind.MarshalException

JAXB客户端,无法读取响应:javax.xml.bind.UnmarshalException

与JAXB编组时如何添加DOCTYPE和xml处理指令?

javax.xml.bind.JAXBException:不支持属性“ com.sun.xml.bind.defaultNamespaceRemap”

为什么gradle失败并出现包javax.xml.bind.annotation不存在错误?

ClassNotFoundException的用于javax.xml.bind.JAXBException与Spring启动时开关到Java 9

错误:javax.xml.bind.JAXBContext(命令行)

javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“ Group”)

javax.xml.bind.UnmarshalException:意外元素(uri:

Kafka 无法解析 javax/xml/bind/* ClassNotFoundExeption for java 12?

SQL Server JDBC中的“ NoClassDefFoundError:javax / xml / bind / DatatypeConverter”

JAX-WS:javax.xml.bind.UnmarshalException

Jenkins - 解析抛出异常。javax.xml.bind.UnmarshalException

带有NoClassDefFoundError的Android检查:javax / xml / bind / JAXBException

xjc,maven-jaxb2-plugin:神秘的java.lang.NoSuchMethodException:javax.xml.bind.annotation.XmlElementRef.required()

jaxb抛出javax.xml.bind.UnmarshalException:仅当在osgi捆绑包中运行时,期望的元素为(无)