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 在评论中指出的那样,问题在于类型需要完全限定。