[SPRING] 서로 참조하는 XML 태그로 Java 객체를 만드는 방법은 무엇입니까?
SPRING서로 참조하는 XML 태그로 Java 객체를 만드는 방법은 무엇입니까?
XML에서 생성 된 세 가지 유형의 Java 객체에 해당하는 태그가있는 XML이 있습니다. 객체의 형식은 다음과 같습니다.
A
- static Map<String, A>
- String name
- String aInfo1
- String aInfo2
B
- static Map<String, B>
- String name
- String bInfo1
- String bInfo2
C
- A aObject
- B bObject
이제 XML에서 A 객체 및 B 객체에 대한 태그 목록을 정의한 다음 이름 필드를 사용하여 A 및 B 객체를 참조하는 C 객체에 대한 태그를 정의합니다. 두 가지 요구 사항이 있습니다.
JAXB와 같은 일부 Java 프레임 워크에 대해서는 읽었지만 XML에서 이러한 유형의 객체를 만드는 방법을 찾을 수 없습니다. Java에서 최소한의 로직으로이 작업을 수행 할 수있는 프레임 워크가 있습니까?
편집하다:
또 다른 요구 사항이 있습니다. 나는 폼의 D와 E 객체를 정의 할 필요가있다.
D
- Map<A, E>
web.xml에서 서블릿을 정의하는 방법과 비슷한 E 객체를 정의합니다. 즉, 먼저 E 클래스의 이름과 클래스를 정의한 다음 다른 위치에서 E의 이름을 사용합니다. 또한 매개 변수를 전달하여 E 개체를 인스턴스화합니다. 태그는 다음과 같습니다.
<E>
<name>queryProcessor</name>
<class>com.mydomain.QueryProcessor</class>
</E>
이제 이것은 D에서 Map의 내용을 정의하는 동안 사용됩니다.
<D>
<map>
<A>name_of_some_A_object</A>
<E name="queryProcessor">
<param1>name_of_some_B_object</param1>
<param2>name_of_some_B_object</param2>
</E>
<A>name_of_some_A_object</A>
<E name="queryProcessor">
<param1>name_of_some_B_object</param1>
<param2>name_of_some_B_object</param2>
</E>
</map>
</D>
본질적으로 D의지도는 매개 변수가 전달 된 기본 유형 E의 클래스와 이름으로 참조 된 A의 객체를 인스턴스화하여 채워집니다.
해결법
-
==============================
1.(JAXB 어노테이션에 익숙하고 XSD가 아닌 Java로 인터페이스를 제어하려는 경우에도 다른 방법을 사용할 수 있습니다).
(JAXB 어노테이션에 익숙하고 XSD가 아닌 Java로 인터페이스를 제어하려는 경우에도 다른 방법을 사용할 수 있습니다).
참고 : 정적지도는 사용하려는 것과 다를 가능성이 높습니다. 해결하려는 문제에 대해 더 자세히 설명하면 몇 가지 대안을 제시 할 수 있습니다.
편집하다:
당신이 바퀴를 발명 한 것처럼 보입니다. 봄을보고 자신의 필요에 맞는 것인지 확인하십시오. 그렇지 않으면 이유를 설명하십시오.
-
==============================
2.XML을 변경하거나 XML에서 Spring XML 구성 파일을 생성하는 XSTL을 생성하여 Spring과 같은 공통 프레임 워크로 수행 할 수 있습니다.
XML을 변경하거나 XML에서 Spring XML 구성 파일을 생성하는 XSTL을 생성하여 Spring과 같은 공통 프레임 워크로 수행 할 수 있습니다.
스프링 코어 문서는 아마도 당신을 시작하기에 충분할 것입니다. XML의 예는 다음과 같습니다.
<bean id="beanOneId" class="the.bean.Class"> <property name="someProperty" value="staticValue"> <property name="someOtherProperty" ref="beanTwoId"> </bean> <bean id="beanTwoId" class="the.otherbean.Class"> <property name="someOtherProperty" ref="beanOneId"> <property name="someOtherProperty" ref="beanThreeId"> </bean>
그러나 당신이 묘사하는 것은 너무 성찰해서는 안됩니다. 다른 객체가 생성자에서 참조를 필요로하지 않는다고 가정하면 (setX), XML을 스캔하여 이름이있는 모든 객체를 만들고 저장하며 "연결"목록을 기억하십시오. 모든 개체가 생성 된 후 연결 목록의 모든 연결을 수행하십시오.
-
==============================
3.어쩌면 XStream을보고 싶을 것입니다 : http://x-stream.github.io/
어쩌면 XStream을보고 싶을 것입니다 : http://x-stream.github.io/
XML과주고받는 객체를 마샬링하고 비 정렬 화 (unmarshal)하는 좋은 라이브러리이며, (Spring과 달리) 더 이상 아무것도하지 않습니다. http://x-stream.github.io/tutorial.html의 예제와 같이 XML에서 객체를 쉽게로드 할 수 있습니다.
Person newJoe = (Person)xstream.fromXML(xml);
XStream이 XML을 이해하려면 설명 된 http://x-stream.github.io/alias-tutorial.html과 같은 일부 별칭을 설정해야합니다.
XStream 단독으로는 두 개의 정적지도가 원인이므로 문제를 완전히 해결할 수 없습니다. 그러나 XStream에 XML에서 As 및 Bs 목록을로드 한 다음 목록에서 두 개의 맵을 작성할 수 있습니다.
A와 B를 참조하는 객체 C의 경우 객체 참조에 대해 설명하는 다음 자습서를 읽을 수 있습니다. http://x-stream.github.io/graphs.html. 필요에 맞지 않으면 XStream을 사용하여 XML에서 필요한 정보를 읽을 수있는 다른 클래스를 쉽게 만들 수 있습니다.
public class CInfo { public String aName; public String bName }
CInfo를 사용하여 C 인스턴스를 생성하십시오. 이미 A와 B의 이름과 인스턴스 맵이 있다면, 그것은 사소할 것입니다.
from https://stackoverflow.com/questions/8358791/how-to-create-java-objects-from-xml-tags-which-are-referring-each-other by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 HATEOAS와의 정식 _links (0) | 2019.04.09 |
---|---|
[SPRING] xml로서의 스프링 특성 파일 (0) | 2019.04.09 |
[SPRING] Spring 데이터 Rest 기능으로 사용자 정의 Spring MVC HTTP 패치 요청 (0) | 2019.04.09 |
[SPRING] Spring MVC BindingResult 나 bean name을위한 평범한 대상 객체가 아니다. (0) | 2019.04.09 |
[SPRING] 스프링 MVC : @SessionAttributes는 컨트롤러간에 공유됩니까? (0) | 2019.04.09 |