2013-05-29 3 views
3

내가 그 XML 버전 1.0에서 허용되지 않는 문자가 직렬화있어 데이터가 :가장 좋은 방법은

<value>this &#18; is not good for 1.0</value> 

는 RESTEasy가이를 통해 직렬화 할 때 JAXB는이 생산 : 1.1 파서 행복에 내가 XML 버전을 설정하면 XML 파서는 1.0로 분석되지 않습니다

<?xml version="1.0" encoding="UTF-8"?> 
<value>this &#18; is not good for 1.0</value> 

는 해당 문자를 허용하지 않습니다.

나는 통해이 작업을 수행 할 수 있습니다

transformer.setOutputProperty(OutputKeys.VERSION, "1.1"); 

을 그래서 내가 알고 싶어하고있어이 변압기를 만들 때 그것이이 구성 있다는 사용하도록 JBoss의/RESTEasy가/JAXB를 구성하는 가장 좋은 방법은 무엇됩니다 이 출력 특성.

+0

JAXB (JSR-222) 일반적으로'Transformer'를 작성하지 않습니다 구현 : 비슷한 질문에 다음과 같은 대답은이 작업을 수행하는 방법의 예를 포함한다. JAXB impl에 의한 XML 출력에 영향을 주려고하십니까? –

+0

@Blaise 잘 알고 계시다면, 이런 종류의 구성을 찾는 방법에 대한 좋은 참고 자료를 알고 계십니까? – Tom

답변

2

당신은 새로운 헤더를 생성하여 Marshaller에서 다음을 설정할 수 있습니다.

// Remove the header that JAXB will generate 
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

    // Grab the encoding that will be used for Marshalling 
    String encoding = (String) marshaller.getProperty(Marshaller.JAXB_ENCODING); 

    // Specify the new header 
    marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.1\" encoding=\"" + encoding + "\">"); 

는 JAX-RS 환경에서 당신은 MessageBodyWriterMarshaller이 방법을 구성 할 수 만들 수 있습니다.

+0

이것은 좋은 일이지만 resteasy를 구성하여 모든 API 진입 점에 대해 직접 코드를 작성하는 대신 기본적으로이 작업을 수행하도록하고 싶습니다. – Tom

+0

@ 톰 - 할 수 있을지 확신하지 못합니다. 그러나 많은 다른 서비스들과 작동 할 수있는 하나의'MessageBodyWriter' 클래스를 생성 할 수 있습니다. –

+0

나는이 독립 경우에 일을 가지고 있지만 "com.sun.xml.internal.bind.xmlHeaders"(내부주의)에 설정된 속성을 변경했다. 나는 아직도 이것을 restyasy를 위해 마샬 러에게 가져 오는 방법을 알아 내지 못했다. – Tom