2013-02-19 4 views
0

저는 XML 요소를 나타내는 Java 객체를 만들고 있습니다. 현재 작업하고있는 표준이 다소 다루기 힘들어 질 수 있기 때문에 여러 JAXB 객체 (.xsd에서 직접 생성 됨)를 사용하여 컴포지션을 설계하고 사용하기 쉬운 추가 기능을 제공합니다. XML로 직렬화하는 것이 적절XML을 나타내는 Java 객체를 XML 형식으로 직렬화하는 것이 적절합니까?

내가 자바로 표현하고있어 객체가 실제 XML 객체이기 때문에이 될 것인가? 그렇지 않은 경우 왜 이것이 성능상의 이유로를 제외하고 나쁜 생각입니까?

편집 : "왜 당신도이 작업을 수행 할 것"

나는의 번호를 받고 있어요 질문을 입력하면 조금 설명하겠습니다. 객체의 논리적 구현이 물리적 구현 (Bloch의 Effective Java, Item 75)과 크게 다른 경우 사용자 정의 직렬화 양식을 고려하는 것이 종종 적합합니다. 필자의 경우, 물리적 형태는 논리적 형태와 크게 다를 것이고 커스텀 직렬 표현이 적절할 것이다. 객체는 항상 XML로 표현 될 수 있기 때문에 논리적으로 잘 맞는 것처럼 보이지만 자바 언어 (I.E. 성능)와의 관련성을 이해하려고 노력하고 있습니다.

+2

'실제 XML 개체'는 무엇을 의미합니까? JAX-B는 대부분의 Java 객체를 직렬화 할 수 있습니다. – bmargulies

+0

이것은 실제로 당신이 성취하고자하는 것에 달려 있습니다 ... 귀하의 비즈니스 요구 사항을 충족시키는 데 필요합니까? 당신이 말했듯이, 비싸기 때문에 당신은 마샬링과 비 정렬 화를 원하지 않습니다. – Geoff

+0

자바 객체가 XML 표준을 나타냅니다. 예를 들어 Java의 SOAP 객체는 XML을 나타냅니다. 객체는 구현하는 XML 표준에 의해 항상 표현 될 수 있어야합니다. JAXB 부분에 대해서는 객체를 올바르게 나타내는 JAXB 요소가 포함 된 컴포지션을 사용하고 있습니다. 그러나 내가 사용하고있는 컨텍스트는 JAXB가 제공하지 않는 추가 논리적 검사를 필요로합니다. – JoshC13

답변

0

내가이는 금광 생각이다 의심. xml 표현은 바이너리 담당자가 필요로하는 공간의 약 100 배가 필요할 수 있습니다. 전에 xml doc serialization을 사용하기 전에 java std serialization을 사용할 것입니다. 일부 바이너리 XML 표현 될 더 적합

(이 편안하지만 효율적이지 않다). JSON이나 Google의 protobuf 용 BSON과 같습니다. 바이너리 XML을 찾는다.

0

Java에서 나타내는 객체는 실제 XML 객체이므로 XML로 직렬화하는 것이 적절합니까?

나는 당신이 DOM 같은 것을 의미 가정합니다. 그리고 나서 XML 바인딩을 사용하여 직렬화합니다 ... DOM 객체를 POJO로 취급합니다!

나쁜 생각, IMO.

그렇지 않은 경우 성능상의 이유로는 왜 나쁜 생각입니까?

  • 직렬화 및 직렬화 해제 성능이 좋지 않습니다.
  • 직렬화 된 형식이 비대화됩니다.
  • 생성 된 XML을 읽을 수 없습니다. 과정에 다른 어떤 어려운
  • 직렬화됩니다. XSLT 변환을 시도해보십시오. 이벤트 기반 파서 (parser)를 사용하여 처리하려고합니다.

실제로 나는 이것이 어떤 좋은 생각 일 수 있다고 생각하는 데 어려움을 겪고 있습니다.


UPDATE

귀하의 설명합니다 (업데이트/의견에) 왜 일에 관해서는이 설득력이 있습니다

은 사용자 정의 직렬화 된 형식을 고려하는 것이 적절한 때 객체의 논리적 구현은 실제 구현과 크게 다릅니다 (Bloch의 Effective Java, 항목 75). 사용자 정의 표현을 사용을 고려에

블로흐의 조언이다. 그리고 그것은 당신이 당신 앞에서 가지고있는 표준 표현보다 더 나은 사용자 정의 표현을 고려한다는 가정에 암시되어 있습니다.

필자의 경우 실제 형식은 논리적 형식과 크게 다를 수 있으며 사용자 지정 직렬 표현이 적합합니다.

왜 XML에서 DOM을 처음으로 표현하려고하는지 설명하지 않습니다. 또는 그것이 왜 더 낫다고 생각하는지.

객체가 항상 XML로 표현 될 수있을 것입니다 때문에

, 그것은

당신은 논리 것을 설명하지 않은 ..., 논리적으로 잘 맞는 것 같다.

...하지만 자바 언어 (I.E. 성능)와의 관련성을 이해하려고합니다.

음의 의미는 위에서 설명한대로입니다. 그리고 이것에 관해서 자바는 특별한 것이 없습니다.


확인을 다른 관점에서 살펴 봅니다.

  1. 정보가 있습니다.
  2. 정보를 XML로 나타냅니다.
  3. XML을 구문 분석하여 메모리 내 표시 (DOM)를 제공합니다.
  4. jaxb와 같은 것을 적용하여 DOM의 XML 표현을 제공합니다 ... POJOS로 표시
  5. DOM을 직렬화합니다.

원본 정보를 나타내는 XML을 나타내는 Java 객체의 XML 표현으로 끝나는 대상.

원래의 정보를 XML로 표현한 것보다 어떤 효과가 있습니까?

이제 3 단계에서 jaxb를 사용하고 사용자 정의 Java 클래스로 직렬화 해제 한 다음 해당 Java 클래스를 직렬화하면 의미가 있습니다. 그렇지만 "XML 요소를 나타내는 Java 객체"가 없습니다. 오히려 원본 XML으로 표현 된 정보를 나타내는 Java 객체가 있습니다.

귀하의 질문에 실제로 쓴 내용과 완전히 다릅니다. 그것이 당신이 의미하는 바라면, 사람들이 왜 당신을 이해하지 못했는지 그리고 당신이 실제로 말한 것이 거의/전혀 틀림 없다고 생각했는지를 설명합니다.

+0

우선, 제 객체는 POJO입니다. 둘째, 적절한 객체에 모든 논리적 제약 조건을 포함하도록 대표 객체를 직렬화 및 비 직렬화합니다. 다른 방법으로 다른 객체에 비 직렬화하는 것과 같은 작업을 수행하는 것은 내가 여기있는 작업이 아닙니다. 내가 궁금한 이유는 직렬화 된 형식이 계약으로 존재하기 때문입니다. 대표적인 XML을 사용하면 항상 변함이 없을 것입니다. – JoshC13

0

XML 파일로 직렬화 하시겠습니까? 일반적인 견해는 이것이 성능상의 이유로 좋은 생각이 아니지만 이러한 객체/xml 파일을 다른 시스템의 피드로 사용하려는 의도가 있다면 고려할 가치가 있습니다.

0

주요 관심사는 다음과 같습니다. XSD, this에 정의 된 규칙에 대한 개체가 그 작동 방식에 대한 링크임을 확인할 수 있습니다. 이 점을 감안할 때 객체를 XML로 정렬하면 약간의 사이클이 소요된다는 것을 알아 두십시오. 중요한 성능 히트 중 하나는 객체를 마샬링하는 데 사용할 JAXB 컨텍스트를 만드는 것입니다. 일종의 싱글 톤 객체 (POJO, Spring bean 등)에서 JAXB Context를 생성하여 매번 다시 생성되지 않도록함으로써이 성능 저하를 최소화 할 수 있습니다.

관련 문제