문제

기존 EJB 프로젝트에 XML 스키마를 추가하려고 했습니다.JAXB는 XML 스키마를 Java 클래스에 바인딩하는 데 사용됩니다.EJB가 세션 중일 때 검색 엔진을 사용하여 DTO를 통해 크롤링할 예정입니다.

엔터티 클래스 파일을 XML 스키마에 매핑하는 직접적인 접근 방식을 찾을 수 없습니다.

지금까지 우리가 달성할 수 있는 유일한 방법은 웹 서비스를 생성하고, XML 스키마(XSD)를 생성하는 WSDL을 생성한 다음 JAXB(xjc 명령)를 통해 XSD 파일을 구문 분석하여 Java 클래스 파일을 생성하는 것입니다.이제 mapping-bind.xml 파일을 사용하여 XML과 Java 클래스 파일을 모두 매핑할 수 있습니다.

그러나 이제 다시 문제는 이것을 엔터티 클래스에 매핑하는 방법입니다.

이것이 우리가 달성하고자 하는 것입니다:

  • XML 스키마가 있는 XML 데이터 개체(이는 이미 JAXB 사양에 있습니다).
  • 그런 다음 Entity Bean은 이 JAXB 객체에 대한 인터페이스를 확장하거나 갖습니다.
  • 모든 지속성 기능은 Entity Bean에 의해 관리됩니다...
  • 그러면 Entity Bean에는 JAXB에 있는 XML 마샬링 및 UnMarshalling 기능이 포함됩니다.
  • 값 개체는 Entity Bean 개체에서 바이너리 또는 XML 형식으로 검색될 수 있습니다.
  • JSP는 값 개체에서 XML 스키마 및 XML 데이터를 쉽게 추출하고 XSL 변환과 같은 작업을 수행할 수 있습니다.

내 주장은 Entity Bean에는 JAXB 객체와 인터페이스하는 표준 방법이 없다는 것입니다.

Castor가 해결책일 수 있지만 다시 웹 서비스를 구현하거나 Castor JDO를 사용해야 합니다.

나는 XStream이 엔터티 빈 클래스 객체를 호출하고 xml 파일을 생성할 수 있는 변환기 클래스를 사용하기 때문에 매우 유용하다는 것을 알았습니다.그러나 나는 다른 클래스를 사용하는 것을 선호하지 않고 기존 Bean 클래스에 기능을 통합했습니다.

이와 관련하여 저를 도와주실 수 있나요?


제가 실제로 달성하려고 하는 것이 무엇인지 말씀드리겠습니다.세션 중 EJB 중에 호출될 검색 엔진을 만들고 있으며 DTO를 통해 크롤러를 사용하고 XML 형식의 스냅샷을 가져옵니다.검색은 다양한 기준에 따라 이루어집니다.

Lucene은 검색 엔진 도구 중 하나이지만 자체 속성과 파일을 사용합니다(독립형처럼 작동함).

PHP와 Java 애플리케이션(EJB 계층) 간 통신을 위해 웹 서비스에서 사용하는 DTO가 이미 있습니다.JAXB가 xml-schema를 통해 자체 생성된 클래스를 사용하기 때문에 수행할 수 없는 XML 테이블의 출력을 가져오기 위해 jaxb의 해당 DTO를 크롤러로 재사용하고 싶었습니다.당신이 말했듯이 나는 JAXB에게 Bean 클래스를 지시하는 방법을 아직 찾지 못했습니다.

도움이 되었습니까?

해결책

데이터 모델(엔티티 빈)을 XML 인터페이스에 긴밀하게 결합하는 것은 세상에서 가장 좋은 아이디어가 아닐 수도 있습니다.다른 하나를 변경하지 않고 하나를 변경하는 것을 방지합니다.

나는 당신이 하려는 일을 100% 확신하지 못하지만 JAXB에 새로운 클래스를 생성하는 대신 클래스를 확장하도록 지시하는 방법이 있다고 생각합니다.정상적으로 Entity Bean을 생성하고 JAXB 생성 Bean이 추가 정보를 사용하여 이를 확장하도록 할 수 있습니다.

어딘가에서 Entity Bean 인스턴스를 얻는다고 말할 수 있습니다. 다른 지속성 계층(예: XML에서 역직렬화)보다 거대한 당신에게 문제가 있습니다.

또한 Java 애플리케이션 간(예: JSP/Servlet 및 EJB 계층 간) 통신에 XML을 사용하는 것은 좋지 않은 생각입니다.XML의 마샬링과 추가된 장황함은 당신에게 거의 이득이 되지 않습니다.EJB가 수행하는 작업인 RMI를 통해 객체를 직렬화하는 것은 구현, 테스트 및 유지 관리가 훨씬 쉬울 것입니다.

다른 팁

EclipseLink JAXB(MOXy) JPA 엔터티를 XML에 매핑하는 데 사용할 수 있습니다.

자세한 내용은 다음을 참조하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top