2010-12-18 4 views
1

나는 제어 할 수없는 외부 소스에서 xsd를 가져 왔습니다. 이제 JAXB 생성 클래스에 사용자 정의 메소드를 추가하여 getters 및 setter가있는 단순한 POJO가 아니라 오브젝트 자체에 대해 더 많이 알고 싶습니다.JAXB 생성 클래스에 사용자 정의 비헤이비어를 추가하는 방법. 기존 메서드를 재정의하지 않는 사용자 지정

이 유형의 접근 방식을 구현 한 후에는 수화 된 개체를 드릴 다운하지 않아도되지만 개체에 사용자 지정 메서드를 호출하는 데 필요한 특정 정보가 있는지 물어보고 원하는 정보를 얻을 수 있습니까?

물론 루트 객체의 자식 하위를 드릴 다운하고 각 자식에 getter 메서드를 호출하고 비즈니스 논리를 구현하는 전통적인 프로그래밍 방식이 있습니다. 그러나 어쨌든 여기서 팀은 그렇게하기를 원하지 않습니다.

내가 지금까지 한 한 가지 접근 방식은 무차별 대입입니다. 마찬가지로 JAXB 사용하여 XSD에서 클래스를 생성합니다. 그럼 내가 외부 유틸리티를 (지금 이것은 독립 실행 형 자바 프로그램입니다) 어떤 특정 파일을 (우리 자신의 방식으로 어떤 방법을 찾아야하고 어떤 .java 파일을 찾아야 만하는지) 특정 디렉토리에있는 텍스트 파일을 읽을 것입니다. 이 클래스는 커스텀 메소드를 보유하고, 그 메소드를 적절한 JAXB 생성 클래스로 옮긴다. 때마다 XSD의 새 버전을 얻을 때마다 클래스를 생성하고,이 유틸리티를 호출하고, JAXB 생성 클래스의 일부 변수가 변경된 경우 컴파일 문제를 해결해야합니다. 유틸리티가 완벽하게 작동합니다. 그러나 나는 이것을 알고 싶다.

더 좋은 방법이 있습니까? 나는 인터넷을 확인했다. 주어진 해결책이 있지만 JAXB 생성 객체의 기존 get 메소드를 무시하고 완전히 새로운 메소드를 추가하지는 않습니다.

좋습니다.

답변

1

글쎄, "가장 깨끗한 접근법"은 소스 코드 레벨이 아닌 런타임시에 설명하는 것을 수행하는 AOP (Aspect Oriented Programming)를 사용하는 것입니다. 메소드를 클래스에 삽입합니다. AOP의 가능한 구현 중 하나는 AspectJ

XML 셰마가 너무 복잡하지 않은 경우 가능할 수있는 두 번째 방법으로 주변에 래퍼를 만드는 것입니다.

세 번째 대안은 이미 설명했습니다. 하지만 당신이 뭔가를 코딩하는 대신 표준 도구에 의지 할 수있는 것은 - 표준 diff/patch 도구를 사용하는 것이 좋습니다. 코드 스타일이 수정되는 한 기존 수정 된 Java 파일에서 diff를 만들고 새로 생성 된 JAXB 코드에 적용하는 것은 너무 복잡하지 않습니다.

관련 문제