제 3 자의 인터페이스를 사용하고 있으며 요청/응답 및 알림을위한 고유 한 XML 형식이 있습니다. XML은 다음과 같이해야합니다 :JAXB : 추상 클래스에 XML 태그 추가
<Message>
<Version>3.1</Version>
<Request>
<Request_Name>
<RequestID> Request ID </RequestID>
...
</Request_Name>
</Request>
</Message>
Request
태그는 Notification
또는 Response
중 하나가 될 수 있습니다. 모두 Messages
에는이 세 가지 중 하나만 있습니다. Request
및 Response
은 모두 RequestID
입니다. Response
은 ReturnValue
입니다. Notification
은 Session
입니다.
중복을 방지하기 위해이 세 가지 유형 각각에 대해 추상적 인 클래스를 만들고 싶었습니다. 거의 작동합니다!
<Message>
<Version>3.1</Version>
<Request_Name>
<RequestID> Request ID </RequestID>
...
</Request_Name>
</Message>
참고 누락 된 Request
태그 : 내가 마샬이 같은 외모에서와 비 정렬 화는 할 수있다! Notification
과 Response
과 동일합니다. 모든 정보가 있지만이 래퍼 태그가 나를 죽이고 있습니다!
[질문 : 내가 추상 클래스에 XML 태그를 넣을 수 있습니까? 아니면 비 추상적으로 만들고 다른 최상위 추상 클래스를 "실제"추상 기본 클래스로 만들 필요가 있습니까?
JAXB에 대한 많은 경험이 없으므로 간단한 방법이 필요합니다. 대신 XMLElement
메시지에서 request
필드를 만들려고했지만 Request_Name
태그를 Request
으로 변경하고 형식 지정을 추가합니다.
내 코드는 기본적으로 아래와 같이 설정자와 CTOR을 간결하게 나타냅니다.
기본 Message
클래스 :
@XmlRootElement(name = "Message")
public class Message {
@XmlElement(required = true, name = "Version") private String version;
private Request request;
private Response response;
private Notification notification;
@XmlElementRef(required = false)
public Request getRequest() {
return request;
}
@XmlElementRef(required = false)
public Response getResponse() {
return response;
}
@XmlElementRef(required = false)
public Notification getNotification() {
return notification;
}
}
추상 Request
클래스입니다.
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
public abstract class Request {
private String requestId;
@XmlElement(name = "RequestID", required = true)
public String getRequestId() {
return requestId;
}
}
예 Request
구현 :
@XmlRootElement(name = "RegForAllNotificationsRequest")
public class RegForAllNotificationsRequest extends Request {
private long session;
private boolean register;
@XmlElement(name = "SessionToUse")
public long getSession() {
return session;
}
@XmlElement(name = "Register")
public boolean isRegister() {
return register;
}
}
이 같은 위의 정렬 화 뭔가 : Notification
및 Response
에 대한 유사
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Message>
<Version>8.3</Version>
<RegForAllNotificationsRequest>
<RequestID>94668</RequestID>
<SessionToUse>548248</SessionToUse>
<Register>true</Register>
</RegForAllNotificationsRequest>
</Message>
:
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<Version>8.3</Version>
<Request>
<RegForAllNotificationsRequest>
<RequestID>94668</RequestID>
<SessionToUse>548248</SessionToUse>
<Register>true</Register>
</RegForAllNotificationsRequest>
</Request>
</Message>
,369을
이것은 실제로 제가 결국에 가까워졌습니다. 나는 나의 해결책을 게시 할 것이지만 당신의 것을 정확하게 표시 할 것이다. – Dennis