2013-07-01 2 views
1

내가 (아니 우리가 유지) 제 3 자 WSDL에서 자바 코드를 생성하는 CXF를 사용합니다.CXF WSDL2Java의 옵션 및 필수 요소

나는 비누 메시지에 마샬링 때 예상대로되지 작업이 두 조각이있다. 왜 SOAP 메시지에 Y를 추가

<x>123456782</x> 
<y xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:nil="true" /> 

는 선택 요소의 상태 : 같은

XML: 
<choice> 
    <sequence> 
    <element name="x" type="xt" nillable="true" minOccurs="0" /> 
    </sequence> 
    <element name="y" type="yt" 
    nillable="true" minOccurs="0" /> 
</choice> 

Java: 
@XmlElement(name = "x", nillable = true) 
protected Xx; 
@XmlElement(name = "y", nillable = true) 
protected Y y; 

나는 X를 추가 할 수 있지만 (코드를 통해) SOAP 메시지에 y를하지 않으면

는 다음 보인다 ? 유사한

뭔가이 조각에 무슨 일이 일어나고 :

CXF 여기
XML: 
<attribute ref="z" use="required" fixed="XXX" /> 

Java: 
@XmlAttribute(name = "z", namespace = "http://www.egem.nl/StUF/StUF0301", 
    required = true) 
protected String z; 

내가 코드를 통해 요소를 추가하지 않을 경우 (참에 스키마 유효성 검사 포함)를 뿌려줍니다. 스키마 유효성 검사를하면 요소 추가가 모두 생성되지 않습니다.

이 요소가 필요하고 내가 (코드를 통해)을 추가하지 않으면, 왜 그것을 고정 속성 생성되지 않고있다?

편집 : 개발 중에 내가 그 CXF 나에게 네임 스페이스에 문제가 준있는 .package-info.java 파일을 생성 깨달았다. 그래서 나는 .package-info.java 파일의 생성을 불가능하게하는 방법을 찾고 있었다. 그 해결책은 pom 파일에 cxf codegen plugin : -xjc-npa에 대한 추가 작업을하는 것입니다. 그 부분은 다음과 같습니다 :

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${cxf.version}</version> 
    <configuration> 
     <defaultOptions> 
      <extraargs>     
       <extraarg>-xjc-npa</extraarg> 
      </extraargs> 
     </defaultOptions> 
    </configuration> 
</plugin> 

그러나 놀랍게도 클래스 파일을 다시 생성 한 후에는 고정 된 요소가 모두 상수가되었습니다. 더 이상 getters/setters가 생성되지 않습니다. 그러나 불행히도 선택 문제가 남아 있습니다..

답변

0

분명히 이전 문서를 읽었습니다. 필자가해야 할 일은 바인딩 파일의 jaxb : globalBindings에 아래의 속성을 추가하는 것뿐입니다.

이전 문서에는 이러한 특성에 대한 언급이 없었습니다.

<jaxb:globalBindings fixedAttributeAsConstantProperty="true" choiceContentProperty="true"> 

이러한 속성 사용하는 XML의 모든 고정 된 속성은 이제 열거하고합니다 (xxxOrxxxOrxxx 형식) 지금 더 나은 코드에서 생성되는 XML의 모든 선택 요소입니다.