2012-03-22 3 views
2

maven 3, jaxb2, FIXML 스키마 및 maven-jaxb2-plugin을 사용하는 독립형 Java 응용 프로그램 용 JAXB2를 사용하여 XML을 생성합니다. XML을 마샬링 할 때 출력 루트 요소에는 xmlns 특성이 있습니다. 어떻게 제거합니까?JAXB Marshaller - xmlns 네임 스페이스 특성을 어떻게 억제합니까?

에서 :

<root ... xmlns="http://www.fixprotocol.org/FIXML-4-4">...</root> 

사람 :

<root ... >...</root> 

편집 :

package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.fixprotocol.org/FIXML-4-4", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.package; 
+0

당신은 package.java의 당신의 Root.java 객체와 같은 패키지 폴더에있는 파일, 또는 무엇 JAXB 주석이 존재 있나요 귀하의 루트 개체에? –

+0

나는 package-info.java를 가지고있다. 나는 그것을 포함하도록 질문을 업데이트했다. maven-jaxb2 플러그인은이 코드를 생성합니다. Root.java에는 XmlAccessorType, XmlElement, XmlAttribute 주석이 있습니다. – arrehman

답변

0

생성 된 jaxb2 코드에서 "http://www.fixprotocol.org/FIXML-4-4"네임 스페이스에 대한 모든 참조를 제거하여 문제가 해결되었습니다. 이것은 원유입니다. 나는 더 자동화 된 방법을 원했다. 당신은 단지 소스 XSD 파일에서의 targetNamespace 속성 을 제거 할 수있는 프로세스를 자동화하기 위해

+0

이 작업을 자동화하는 방법을 찾아 낼 수 있었습니까? – icedek

+0

아니, 그게 나에게 가치있는 것은 아니었다. 그래서 나는 그것을했다. 해결책을 찾으면 알려주세요. – arrehman

1

네임 스페이스 정보가 포함되지 않게하려면 @XmlSchema 특수 효과를 package-info.java에서 삭제하면됩니다.

이렇게하면 자동 빌드가 중단되지만, 이것은 메이븐 플러그인에서 자동 생성됩니다.

출력물에서 이것을 제거 할 수 있는지 플러그인 옵션을 살펴 보거나이 라인을 제거하기 위해 추가 플러그인을 사용해야하거나 package-info.java를 모두 삭제해야합니다.

질문 -이 XML을 네임 스페이스 정보가 포함될 것으로 예상되는 서비스에 전달할 예정입니까? 나는 왜 네임 스페이스 정보를 없애고 싶은지에 관심이 있다고 생각한다.

+0

XML을 보내는 외부 클라이언트가 특별히 우리에게 XML을 제거하라고 요청했습니다. 이유를 모르겠다. 당신이 언급 한 옵션이나 어떤 일이 있다면 대안을 조사 할 것입니다 ... – arrehman

0