JAXB/MOXY XmlAdapter 失败,可能的原因是适配器 class 名称不正确或设置了错误的加载器
JAXB/MOXY XmlAdapter failing with Possible causes are an incorrect adapter class name or wrong loader has been set
我正在尝试使用 Moxy 文档站点 (https://www.eclipse.org/eclipselink/documentation/2.4/moxy/advanced_concepts006.htm)
中列出的 Point 适配器变体创建一个适配器来编组 Point2D
我在与我尝试序列化的 class 结构相同的包中创建了 MarshallingPoint 和 MarshallingPointAdapter classes,我的适配器正在导入 jakarta.xml.bind.annotation.adapters.XmlAdapter 而不是 javax.xml.bind.annotation.adapters.XmlAdapter 在示例中使用——这现在应该是正确的,对吧?无论如何,我也用 javax.xml.bind.annotation.adapters.XmlAdapter 尝试过,结果相同。
我正在使用绑定文件(没有注释)
<xml-java-type-adapters>
<xml-java-type-adapter value="MarshallingPointAdapter" type="java.awt.geom.Point2D"/>
</xml-java-type-adapters>
当我 运行 它时,我得到以下信息:
“为包 [tufts.sds] 指定了无效的 XmlJavaTypeAdapter ...。可能的原因是设置了不正确的适配器 class 名称或错误的加载程序。”
无论我更改什么,我都会得到这个,即使我切换到使用将字符串转换为大写的示例字符串适配器 (http://blog.bdoughan.com/2012/02/jaxb-and-package-level-xmladapters.html),我仍然会遇到同样的错误。
这个错误到底想告诉我什么?求助!
以防万一,这是我的替代点class:
package tufts.sds;
public class MarshallingPoint {
private int x, y;
public MarshallingPoint() {
this(0, 0);
}
public MarshallingPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
这是我的适配器:
package tufts.sds;
import java.awt.geom.Point2D;
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
public class MarshallingPointAdapter extends XmlAdapter<MarshallingPoint, Point2D> {
public MarshallingPoint marshal(Point2D val) throws Exception {
return new MarshallingPoint((int) val.getX(), (int) val.getY());
}
public Point2D.Float unmarshal(MarshallingPoint val) throws Exception {
return new Point2D.Float(val.getX(), val.getY());
}
}
正如 Andrew James 在评论中指出的那样,问题在于类型需要完全限定。
我正在尝试使用 Moxy 文档站点 (https://www.eclipse.org/eclipselink/documentation/2.4/moxy/advanced_concepts006.htm)
中列出的 Point 适配器变体创建一个适配器来编组 Point2D我在与我尝试序列化的 class 结构相同的包中创建了 MarshallingPoint 和 MarshallingPointAdapter classes,我的适配器正在导入 jakarta.xml.bind.annotation.adapters.XmlAdapter 而不是 javax.xml.bind.annotation.adapters.XmlAdapter 在示例中使用——这现在应该是正确的,对吧?无论如何,我也用 javax.xml.bind.annotation.adapters.XmlAdapter 尝试过,结果相同。
我正在使用绑定文件(没有注释)
<xml-java-type-adapters>
<xml-java-type-adapter value="MarshallingPointAdapter" type="java.awt.geom.Point2D"/>
</xml-java-type-adapters>
当我 运行 它时,我得到以下信息: “为包 [tufts.sds] 指定了无效的 XmlJavaTypeAdapter ...。可能的原因是设置了不正确的适配器 class 名称或错误的加载程序。”
无论我更改什么,我都会得到这个,即使我切换到使用将字符串转换为大写的示例字符串适配器 (http://blog.bdoughan.com/2012/02/jaxb-and-package-level-xmladapters.html),我仍然会遇到同样的错误。
这个错误到底想告诉我什么?求助!
以防万一,这是我的替代点class:
package tufts.sds;
public class MarshallingPoint {
private int x, y;
public MarshallingPoint() {
this(0, 0);
}
public MarshallingPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
这是我的适配器:
package tufts.sds;
import java.awt.geom.Point2D;
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
public class MarshallingPointAdapter extends XmlAdapter<MarshallingPoint, Point2D> {
public MarshallingPoint marshal(Point2D val) throws Exception {
return new MarshallingPoint((int) val.getX(), (int) val.getY());
}
public Point2D.Float unmarshal(MarshallingPoint val) throws Exception {
return new Point2D.Float(val.getX(), val.getY());
}
}
正如 Andrew James 在评论中指出的那样,问题在于类型需要完全限定。