2012-05-14 2 views
1

큰 XML을 생성해야합니다. 현재 JAXB 2.0을 사용하고 있습니다.jaxb를 사용하여 큰 xml 생성

문제는 내가 모든 객체를 메모리에 유지하고 힙 공간이 부족할 확률이 매우 높다는 것입니다.

이 작업을 수행하는 방법에 대한 최선의 방법을 알고 싶습니다.

감사합니다.

+0

을, 나는 JAXB에서 원본 데이터를하지 않습니다 같은데요로 시작하는이 올바른 객체? 그렇다면 XML을 마샬링하기 위해 JAXB를 사용하지 않는 것이 좋습니다. 대신 원본 데이터에서 직접 XML을 작성하고 XML에 마샬링하는 유일한 목적으로 모든 개체를 작성하는 메모리 부담을 덜어줍니다. –

+0

@Patrice : 입력 내용은 JSON 문자열에서 가져옵니다. 이 객체들을 빌드하고, 그것들 위에 몇 가지 규칙을 실행해야합니다 (Drools). 마침내 XML을 마샬링해야합니다. 그래서 저는 그것들을 소스에서 직접 실행할 수는 없습니다. – Balaji

답변

0

저는 다음과 같이 제안합니다.

XML은 어떻게 작성합니까? 먼저 객체 그래프를 작성합니다. 즉, 모든 객체와 객체 간의 종속성을 생성합니다. 그럼 당신은 이런 식으로 뭔가를 호출

JAXBContext.newInstance("YOUR PACKAGES LIST").marshal(rootObject, out);

JAXB 즉 게터를 사용하여, 콩로 개체에 액세스합니다. 따라서 마샬링하기 전에 전체 개체 그래프를 만들 필요가 없습니다. 요청에 따라 객체를 가져올 수 있도록 getter의 주문형 구현을 제공하면됩니다. 나는 그것이 당신이 메모리 소비를 줄이는 데 도움이 될 것이라고 믿습니다.

클래스 내에서 주문형 메커니즘을 구현하지 않으려면 AspectJ 또는 다른 aspect 지향 라이브러리 (또는 cglib 또는 javassist와 같은 직접 바이트 코드 수정 라이브러리)를 사용하여 주문형 검색 코드를 모델 개체.

+0

예 .... 모든 개체를 만든 다음 마샬링에 보냅니다. 그러나 반복적 인 객체 (직원 데이터 인 XML의 노드)가 힙 공간 문제가 발생하지 않도록 일괄 적으로 (객체 생성 및 데이터 작성) 수행되도록 디자인을 변경했습니다. 어떻게하면 주문형 구현을 할 수 있습니까? ? – Balaji

관련 문제