SAXException2:在 IDREF 属性中找到对象,但此对象没有 ID

SAXException2: Object is found in an IDREF property but this object doesnt have an ID

提问人:Richard 提问时间:5/27/2022 最后编辑:Richard 更新时间:5/27/2022 访问量:247

问:

我正在使用 Java8 开发一个 SpringBoot 应用程序,该应用程序是用于将 REST 接口放在 SOAP 服务上的代理。因此,我需要将许多 POJO 转换为生成的 SOAP 对象来调用 SOAP 服务。

这一切都很完美,但是我有一个生成的类给出了一个错误,因为它没有定义的成员变量(即它的类型)。Object

邻近位置:.java

public class ProximityToLocation extends Locator implements Serializable {
    @XmlElement(
        required = true
    )
    @XmlIDREF
    @XmlSchemaType(
        name = "IDREF"
    )
    protected Object to;

正如你在上面生成的类中看到的,它有一个名为 .通过查看对服务的其他SOAP调用,我知道该对象需要为生成类型。ProximityToLocationtoObjecttoGPSLocator

GPS移动器.java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
    name = "GPSLocator",
    propOrder = {"latitude", "longitude"}
)
public class GPSLocator extends Locator implements Serializable {
    private static final long serialVersionUID = 1L;
    protected double latitude;
    protected double longitude;

因此,我将对象设置为 ,但是当它尝试调用 SOAP 服务时,它会出现以下错误:toGPSLocator

SAXException2:对象 “com.xxx.transit._2008a.location.GPSLocator@6b3cda96”位于 IDREF 属性,但此对象没有 ID

我将 设置为 a,因为当我拦截正在工作的直接 SOAP 调用时,我看到这是设置的。ObjectGPSLocator

溶液

对我来说,对象似乎需要一个 ID,但我不明白如何设置它,因为类不是我的(即我无法更改它们)。to

我想如果该类具有以下内容,它将起作用:GPSLocator

@XmlID
@XmlElement
public String getId() {
    return id;
}

问题

上面提到的类是由托管 SOAP 服务的第三方生成的类,因此我无法修改这些类。

问题

如何将不属于我的生成类添加到生成的类中?id

更多信息

感谢下面的评论,建议我对类进行子类化并添加 .所以我尝试了以下方法:GPSLocatorid

public class GPSLocator extends com.xxx.transit._2008a.location.GPSLocator {

    protected String id = Double.toString(Math.random()*1000);

    @XmlID
    @XmlElement
    public String getId() {
        return id;
    }
}

但是,即使我使用这个新类,我仍然会收到上面相同的错误。

[com.sun.istack.SAXException2: Object "com.xxx.restosgi.dto.transit.location.GPSLocator@6ea818f2" is found in an IDREF property but this object doesnt have an ID.]

我做错了什么吗?

Java SOAP XML 解析 SAX

评论

0赞 f1sh 5/27/2022
这回答了你的问题吗?如何使用@XmlIDREF和@XmlID
0赞 f1sh 5/27/2022
正如您正确假设的那样,您需要一个用 注释的字段(a 或 )。GPSLocator@XmlElement@XmlAttribute@XmlID
0赞 Richard 5/27/2022
我的问题是该类是由拥有SOAP服务的第三方生成的,因此我无法更改它,即。添加 ID 字段。所以我想知道是否有为什么要这样做?我是否应该使用反射在运行时向类添加一个新的成员变量?GPSLocator
1赞 f1sh 5/27/2022
不能在运行时添加字段。不过,您可以对 GPSLocator 进行子类化,并将该字段添加到子类中。

答: 暂无答案