내 모든 낙타 (v 2.13.1) 경로에 대한 전역 오류 처리기를 구축하려고합니다. 이 오류 처리기에 예외가 발생하면이를 기록하고 팀에 이메일을 보냅니다.
그래도 다형성 및 jaxb 주석이 달린 메시지에 문제가 있습니다. 내 모든 메시지는 다음과 유사합니다.
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
static abstract class Request {
@XmlElement(required = true)
abstract String getThing();
abstract void setThing(final String thing);
}
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
static class MyRequest extends Request {
private String name;
@XmlElement(required = true)
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
private String thing;
@Override
@XmlElement(required = true)
public String getThing() {
return thing;
}
public void setThing(final String thing) {
this.thing = thing;
}
}
내가 가지고 노는 내 오류 경로는 다음과 같습니다.
from (errorQueue)
.convertBodyTo(Request.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final Request req = exchange.getIn().getBody(Request.class);
log.info("name = {}, thing = {}", null, req.getThing());
}
});
실패한 구성 요소에 따라 메시지는 MyRequest, MyOtherRequest 등이 될 수 있습니다. 모든 메시지는 Request에서 상속됩니다. 테스트중인 특정 메시지는 다음과 같습니다.
<myRequest>
<name>some_name</name>
<thing>some_thing</thing>
</myRequest>
이것을 실행하면 다음과 같은 오류가 발생합니다.
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"myRequest"). Expected elements are <{}request>
jaxb 주석이 달린 메시지를 다양한 유형에서 일부 기본 유형으로 변환하여 기본 클래스에서 정보를 얻을 수있는 방법은 무엇입니까?
기본 클래스 대신 인터페이스를 사용하고 싶지만 비슷한 결과를 얻었습니다.
MyRequest
하위 클래스 가 없기 때문에 메타 데이터가 클래스에 대해 처리되지 않을 수 있습니다 . @XmlSeeAlso
수퍼 클래스에 주석을 추가해보십시오 .
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.PROPERTY)
@XmlType(propOrder = {})
@XmlSeeAlso({MyRequest.class})
static abstract class Request {
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다