gpt4 book ai didi

java - 在 JAXB 中解码期间忽略未定义的元素引用

转载 作者:行者123 更新时间:2023-12-04 03:53:00 25 4
gpt4 key购买 nike

我目前正在从事一个使用 CXF 框架请求 Web 服务的项目。

由于某些原因,我开始收到无效的 XML SOAP(缺少引用自的 ID 的元素)响应,导致在解码到 POJO 实例期间抛出异常。

示例:

XML 摘录,其中属性 ref 引用具有标识符 Person1 的元素,该元素在 XML 中不存在。

<ext:Applicant s:ref="Person1"/>

其中 ref 是 XSD 架构中的 IDREF 类型

<attribute name="ref" type="IDREF"/>

JAXB 抛出的异常

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: Undefined ID "Person1". ] with root cause
javax.xml.bind.UnmarshalException: Undefined ID "Person1".
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:744) ~[jaxb-impl-2.3.1.jar!/:2.3.1]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.errorUnresolvedIDREF(UnmarshallingContext.java:795) ~[jaxb-impl-2.3.1.jar!/:2.3.1]
at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$IDREFTransducedAccessorImpl$1.run(TransducedAccessor.java:330) ~[jaxb-impl-2.3.1.jar!/:2.3.1]
at...

有没有办法让 JAXB 忽略丢失的引用并在不抛出异常的情况下解码传入的 XML 响应?

最佳答案

请求中未提供 XML 对象以进行更具体的讨论。有一个方便的解决方法,可以为 JAX-B 对象创建 CustomAdapter 以确定如何编码取消编码对象。

例如,可以实现以下CustomAdapter:

public static class CustomAdapter extends XmlAdapter<Object, Person1> {

@Override
public Object marshal(Person1 value) {
// your implementation to marshal
}

@Override
public Person1 unmarshal(Object value) {
// your implementation to unmarshal
}
}

XmlAdapterjavax.xml.bind.annotation.adapters.XmlAdapter 包中。

如果您将 Person1 用作其他对象(组合)中的字段,您可以使用 @XmlJavaTypeAdapter 对其进行注释,如下所示:

  @XmlJavaTypeAdapter(CustomAdapter.class)
private Person1 person1;

如果有帮助,请告诉我。

关于java - 在 JAXB 中解码期间忽略未定义的元素引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64173852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com