我将 Spring boot 3 与 Java 17 结合使用,并设置 com.sun.xml.bind.namespacePrefixMapper 属性,如下所示,
final JAXBContext jaxbContext = JAXBContext.newInstance(t.getClass());
final Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespacePrefixMapper());
MyNamespacePrefixMapper 类如下所示,
import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper;
public class MyNamespacePrefixMapper extends NamespacePrefixMapper {
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if (MyConstant.NAMESPACE_MY_SERVICE.equals(namespaceUri)) {
return "tos";
}
return suggestion;
}
}
我有下面的依赖项,
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
我收到财产异常信息,
jakarta.xml.bind.PropertyException: name: com.sun.xml.bind.namespacePrefixMapper value: com.example.MyNamespacePrefixMapper@4bd4d5fa
我在这里缺少什么?
属性名称从
"com.sun.xml.bind.namespacePrefixMapper"
更改为 org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl#PREFIX_MAPPER
,相当于 jaxb3 和 jaxb4 中的 "org.glassfish.jaxb.namespacePrefixMapper"
。
请使用属性
"org.glassfish.jaxb.namespacePrefixMapper"
或关联常量的新值。
您还可以尝试使用 Namespace Prefix XJC Plugin 以便自动从 XSD 生成 JAVA 代码。