여기에 RESt 웹 서비스 용으로 작성된 @ javax.xml.bind.annotation.Xml ... 주석이있는 클래스가 있습니다. Jersey는 스프링 관리 웹 컨테이너에 설치되며 웹 서비스는 잘 형식화 된 XML을 반환합니다. 우리는 maven-enunciate-plugin을 사용하여 웹 서비스를 문서화하고 반환 된 XML 문서에 xsd를 작성합니다. 이제 xml 유효성 검사에서 누락 된 정의에 대해 불평하지 않도록 문서 xsd 파일을 반환 된 XML 파일 내의 schemaLocation으로 사용하려고합니다. XML serialization을 어떻게 구성 할 수 있습니까?저지 JAXB 직렬화의 XML 출력을 사용자 정의하는 방법
4
A
답변
7
올바르게 기억한다면 생성 된 XML에 네임 스페이스 식별자를 올바르게 작성해야합니다.
1) 커스텀 마셜 러 (unmarshaller, 역시 BTW)를 설정해 돌려주는 JaxbFactory를 작성했습니다. 나는 그 팩토리 클래스가 저지 "볼 수"없습니다)
//constructor
public JaxbFactory() throws Exception {
context = JAXBContext.newInstance(ResourceDto.class);
// Setup the marshaller
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, XmlMetadataConstants.XML_SCHEMA_LOCATION); // this schema location is used in generating the schema-location property in the xml
}
2 ... 게터를 생략/아래 설정을 비 정렬 화하고있다. 이를 표시하기 위해 MarshallerProvider를 만듭니다. 즉,이 같은 같습니다 내가 저지 저지를 사용하여 봄에 유선있어
@Provider
public class ResourceJaxbMarshallerProvider implements ContextResolver<Marshaller> {
// injected by Spring
private ResourceJaxbFactory ResourceJaxbFactory;
private ResourceStatusJaxbFactory ResourceStatusJaxbFactory;
/*
* ----------------------------------------
* Setters (for Spring injected properties)
* ----------------------------------------
*/
public void setResourceJaxbFactory(ResourceJaxbFactory ResourceJaxbFactory) {
this.ResourceJaxbFactory = ResourceJaxbFactory;
}
public void setResourceStatusJaxbFactory(ResourceStatusJaxbFactory ResourceStatusJaxbFactory) {
this.ResourceStatusJaxbFactory = ResourceStatusJaxbFactory;
}
/*
* ------------------------
* Interface Implementation
* ------------------------
*/
public Marshaller getContext(Class<?> type) {
if (type == ResourceDto.class)
return ResourceJaxbFactory.getMarshaller();
else if (type == ResourceStatusDto.class)
return ResourceStatusJaxbFactory.getMarshaller();
else
return null;
}
}
을/Spring에 의해 작성되는 봄 서블릿 그래서 어떤 @provider 클래스는 자동으로 저지에 의해 인식됩니다. 내 Spring applicationContext.xml에서 자원 제공자를 인스턴스화하기 만하면된다. 그것은 차례 차례로 공장에서 마샬 러를 잡으러 갈 것입니다.
3) 내가 비판적으로 발견 한 다른 하나는 내 리소스가 포함 된 루트 패키지에 package-info.java 파일을 만들어야한다는 것입니다. 다음과 같습니다
/*
* Note that this file is critical for ensuring that our ResourceDto object is
* marshalled/unmarshalled with the correct namespace. Without this, marshalled
* classes produce XML files without a namespace identifier
*/
@XmlSchema(namespace = XmlMetadataConstants.XML_SCHEMA_NAMESPACE, elementFormDefault = XmlNsForm.QUALIFIED)
package com.yourcompany.resource;
import javax.xml.bind.annotation.XmlNsForm;
가 적어도 내가 할하는 데 필요한 모든이의 생각 , 나는 모든 단일 조각을 기억할 수 없습니다. 나는 package-info.java 조각이 모두 함께 모여 든 마지막 중요한 톱니 바퀴라는 것을 기억한다.
희망이 있습니다. 나는이 모든 것에 대한 정보를 얻기 위해 너무 많은 시간을 썼다. Jersey는 적절한 xml 스키마 유효성 검사 (스키마 유효하지 않은 입력에 대한 올바른 오류보고)를 수행하기 전에 간단하게 간단했습니다. 일단 내가 그 길을 시작하면 저지는 뇌사에서 쉽게 딱딱하게 움직였다. 그 어려움의 대부분은 온라인의 다양한 게시물에서 모든 세부 사항을 밝혀내는 것이 었습니다. 다행히도 이것은 당신을 더 멀리, 더 빨리 데려 올 것입니다. :-)
관련 문제
- 1. XML에서 JAXB beans를 생성하는 경우 JAXB 마샬링을 사용자 정의하는 방법
- 2. 슬라이더를 사용자 정의하는 방법?
- 3. uitableview를 사용자 정의하는 방법
- 4. wp7에서 XML 파일 저장과 직렬화의 차이점은 무엇입니까?
- 5. RDFLib : XML 직렬화의 네임 스페이스 접두사
- 6. Wordpress - 테마를 사용자 정의하는 방법?
- 7. Asp.net 메뉴, 사용자 정의하는 방법?
- 8. phpBB : UI를 사용자 정의하는 방법
- 9. Phonegap : 툴바를 사용자 정의하는 방법?
- 10. Google 광고를 사용자 정의하는 방법
- 11. web.xml 구성을 사용자 정의하는 방법
- 12. JFreeChart로 XYLineChart를 사용자 정의하는 방법
- 13. 주석 파일을 사용자 정의하는 방법
- 14. 블렌드에서 애니메이션을 사용자 정의하는 방법?
- 15. fisheye 메뉴를 사용자 정의하는 방법!
- 16. Ext.menu.Menu의 방향을 사용자 정의하는 방법
- 17. 저지
- 18. HtmlHelper.ValidationMessage 출력을 사용자 정의하십시오.
- 19. SimpleCursorTreeAdapter - 사용자 레이아웃을 사용자 정의하는 방법
- 20. 직렬화 중에 xml 출력을 제어하는 방법
- 21. JAXB XML 출력 형식 질문
- 22. JAXB XML 구문 분석 문제
- 23. 비 직렬화의 파일 손상, 충돌을 방지하는 방법?
- 24. JAXB가 복수 메소드 이름을 생성하는 방법을 사용자 정의하는 방법은 무엇입니까?
- 25. xml serialization의 출력을 변경합니다.
- 26. JAXB에서 사용자 지정된 마샬링 된 출력을 만드는 방법은 무엇입니까?
- 27. JAXB
- 28. EJB 통합 - JAXB 인터페이스를 사용하는 XML
- 29. ghci의 readline 키 바인딩을 사용자 정의하는 방법
- 30. DataGrid의 DataSource로 배열 : 열을 사용자 정의하는 방법?