【发布时间】:2017-10-10 05:59:24
【问题描述】:
我正在尝试将对象列表编组为 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", new 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)
现在,如果我使用 Internal 类: com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
相反,它有效。然而,这个项目是使用 maven 构建的,当你依赖一个内部类时它会抱怨。使用内部类也是一个坏主意,至少有人告诉我。
我该如何解决这个问题?
【问题讨论】:
标签: java xml maven jaxb marshalling