我在我的项目中一直使用com.sun.xml.bind.marshaller.NamespacePrefixMapper
,我在JDK 6u17中没有遇到任何问题。现在我刚刚更新到6u18,我发现它已被替换为com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper
。但是,如果我导入这个类并尝试编译我的类,我会收到错误:
package com.sun.xml.internal.bind.marshaller does not exist import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
我可以通过NetBeans代码完成功能访问此包,NetBeans不会突出显示错误代码。
任何帮助将不胜感激!
答案 0 :(得分:18)
我不认为班级com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper
是com.sun.xml.bind.marshaller.NamespacePrefixMapper
的替代品,前者已经存在了很长时间而且根本不会被你使用} (因此internal
包装)。
这里的问题是JavaSE 6没有JAXB RI(它有JAXB实现但没有JAXB RI)所以如果你想依赖RI特定的功能,你应该在你的应用程序中捆绑JAXB RI(那个将保护您免受Java SE中的JAXB更改。
答案 1 :(得分:15)
NamespacePrefixMapper
不再可用了。
使用package-info.java
中的注释:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://nameSpaceUri"
, xmlns = {
@XmlNs(prefix = "myPrefix", namespaceURI = "http://nameSpaceUri")
}
, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package my.package.;
这适用于与JDK7捆绑在一起的JAXB,用于其他JDK版本更新JAXB到2.2.4。
答案 2 :(得分:4)
您不应该直接使用com.sun.**
课程。它们被视为内部更改,如有更改,恕不另行通知。 (看看刚刚发生了什么!!)新类在包名中有internal
的事实是一个更大的暗示!
我强烈建议您寻找更好的方法来做您正在做的事情......不使用com.sun.**
类。
编辑 - 嗯,看起来无论谁负责JAXB RI已经破坏了有关该扩展名的包名称的Sun规则!同样令人遗憾的是,Sun尚未在JDK 6.0中实现此特定的RI扩展。
答案 3 :(得分:4)
com.sun.*
”的一般建议不适用于此处,此类的javadoc说:
由用户应用程序实现以确定URI - >前缀映射。
Check this article并查看它是否适合您。
答案 4 :(得分:1)
我最近在将一些旧代码移植到新项目时遇到了这个问题。旧项目使用ant编译得很好,但是新项目因上面提到的错误而失败。
经过一番挖掘后,我发现旧的build.xml文件使用了一个javac编译器选项来绕过上面的限制:
<javac srcdir="${srcDir}" destdir="${outputDir}" classpathref="classpath" debug="on">
<compilerarg value="-XDignore.symbol.file" />
</javac>
找到它后,我搜索并发现了另一个stackoverflow问题: Using internal sun classes with javac
答案 5 :(得分:1)
对于那些使用maven的人来说,通过这个链接发现包括JAXB-RI和JAXB for java6。
答案 6 :(得分:1)
堆栈溢出的下面帖子回答了这个问题: Define Spring JAXB namespaces without using NamespacePrefixMapper
关键是在构建时包含rt.jar并在编译后将其从应用程序中删除。
答案 7 :(得分:0)
对我来说,使用 JBoss,修复需要在 WEB-INF/jboss-deployment-structure.xml 中显式添加一行
JBoss AS7 有一个不同于以前版本的类加载机制。
在结构中添加行 '',如下所示:
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCIDR
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Ref EnvironmentName
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: !Ref EnvironmentName
InternetGatewayAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId: !Ref InternetGateway
VpcId: !Ref VPC
....