2012-08-06 1 views
0

이전에 비 정렬 화 된 데이터가 사용자에 의해 변경된 경우에만 JAXB를 사용하여 데이터를 마샬링합니다. JAXB에서 생성 한 클래스에는 equals() 메서드가 없다는 것을 알고 있습니다. 언 마샬링 후 데이터가 변경되었는지 여부를 확인하는 간단한 방법이 있습니까?이전에 JAXB로 비 정렬 화 된 데이터가 변경되었는지 확인하는 방법은 무엇입니까?

예. org.w3c.dom.Document은이 목적으로 isEqualNode() 방법을 사용합니다.

답변

0

나는 org.w3c.dom.Document에 마샬링하기로 결정했습니다 :

0

따라서 JAXB는 클래스 인스턴스에서 데이터를 마샬링하거나 xml을 언 마샬링하여 인스턴스를 채우는 클래스를 생성하지 않습니다. 일반적으로 클래스는 XJC에 의해 컴파일 타임 전에 생성됩니다. 한 가지 옵션은 클래스를 업데이트하여 equals 메서드를 포함하는 것입니다. 나중에 다시 생성해야 할 경우에 대비하여 일반적으로 생성 된 코드를 업데이트하고 싶지 않으므로 이는 그리 좋은 방법이 아닙니다. 따라서 클래스의 두 인스턴스를 취하여 비교하는 유틸리티 클래스를 작성할 수 있습니다.

언 마샬링 후 비교하기위한 것입니다. 또 다른 옵션은 파일의 체크섬을 수행하여 언 마샬링하기 전에 검사를 수행하는 것입니다.

0

아마도 평등을 확인하기 위해 Comparator 또는 유틸리티 클래스를 구현하는 것이 가장 좋습니다. 예를 들어 commons-lang EqualsBuilderCompareToBuilder을 사용할 수 있습니다.

+0

EqualsBuilder를 사용할 때의 이점을 이해할 수 없었습니다. 관심있는 각 클래스에 코드를 작성해야합니다. 그렇지 않습니까? Eclipse가 "Source -> Generate hashCode() and equals() ..."를 사용하면 더 잘 수행되지 않습니까? – ka3ak

+0

reflectionEquals 메소드를 본 적이 있습니까? 이클립스 (프로세스가 유용하지만 클래스를 변경하면 hashCode와 Equals를 다시 생성해야한다). reflectionEquals를 사용하면 새 필드를 추가하거나 다른 필드를 제거 할 때 코드를 변경할 필요가 없습니다. – YMomb

+0

또한 생성 된 클래스를 수정하려면 hashCode 및 equals enduce를 생성하십시오. 코드를 다시 생성 할 때마다이 작업을 수행해야하므로 좋지 않습니다. EqualsBuilder.reflectionEquals를 사용하면 대신 유틸리티 클래스를 작성할 수 있습니다. – YMomb

0

상당히 표준적인 접근 방식은 transient boolean을 클래스에 추가하는 것입니다. isDirty, 그리고 세터 메소드가이를 true로 설정합니다. (또는 원하는 경우 dateModified을 추가하십시오.)

분명히 부적절 할 수있는 내부 클래스 코드를 변경해야합니다.

수정 된 모든 개체 중 일부는 Set으로 유지할 수도 있습니다. 그러나이 논리를 올바르 게 만드는 것은 코드가 어떻게 구성되어 있는지에 따라 까다로울 수도 있고 불가능할 수도 있습니다.

+0

"isDirty"- 접근법의 장점은 나중의 비교를 위해 원본 데이터의 복사본을 보관할 필요가 없다는 것입니다. 그러나 다른면에서 나는 데이터가 바뀔 수있는 프로그램의 모든 장소를 찾아야 만합니다. 게다가 setter가 항상 값을 변경하는 것은 아니며 이전 값을 설정할 수도 있습니다. – ka3ak

+0

운이 좋다면 코드는 모든 것에 setter를 사용합니다.이 경우 isDirty를 쉽게 추가 할 수 있습니다. 그러나 그렇지 않다면, 네, 주위를 뿌리 내려해야합니다.필자는 필드의 이름을 변경하거나 비공개로 만들고 컴파일러에서 무엇이 중단되는지 알려주고 싶습니다. 일반적으로 나는 같은 값을 설정하는 것에 관해서는 매우 정교하지 않다. 이런 일이 많이 일어나지 않는 한, 이것은 단지 약간의 부가적인 마셜 링을 일으킬뿐입니다. – user949300

0

당신이 할 수 JAXB2 기본 플러그인을 사용할 수있는 모델 클래스로 생성 방법과 동일 isEqualNode() - 메서드를 사용합니다. 원본 문서가 새 문서와 다른 경우 파일로 정렬합니다. XML 데이터가 너무 많아서 저에게 적합합니다.

+0

Eclipse 용 플러그인이 있습니까? 나는 아무것도 찾을 수 없었다. 나는 메이븐 (Maven) 설정 등을 처리하기에는 너무 게으른 편이다. – ka3ak

관련 문제