2014-06-05 2 views
1

둘 다 XSD 선택 항목을 가지고 있는데, 둘 다 javax.xml.datatype.XMLGregorianCalendar 유형입니다. 권장대로 ObjectFactory와 JAXBElement를 사용하여 두 가지 선택 사항을 구별했습니다. 이 anySimpleType :ObjectFactory 메소드의 @XmlSchemaType

@XmlElementDecl(namespace = "http://me.com/1.0/api", name="timestamp") 
JAXBElement<XMLGregorianCalendar> createTimestamp(XMLGregorianCalendar timestamp) { 
    return new JAXBElement<XMLGregorianCalendar>(_timestamp_QNAME, XMLGregorianCalendar.class, null, timestamp); 
} 

는 지금 자동 생성 된 WSDL에 'dateTime을'대신 XS에 표시되는 형식을 변경하고 싶습니다.

@XmlSchemaType 주석은 ObjectFactory 메소드에서 지원되지 않으며 패키지 레벨 @XmlSchameType 태그는 여기에서 생성 된 유형을 수정할 수 없습니다.

@javax.xml.bind.annotation.XmlSchemaType(name="dateTime", type=javax.xml.datatype.XMLGregorianCalendar.class) 
package my.example.api; 

이 경우에도 여전히 xs : anySimpleType이 생성되었습니다.

내 프로젝트에서 EclipseLink를 사용할 수 없습니다. 대신 일을

답변

0

:

@XmlElementRefs({ 
    @XmlElementRef(name="foo", type=JAXBElement.class), 
    @XmlElementRef(name="bar", type=JAXBElement.class) 
}) 
public JAXBElement<XMLGregorianCalendar> getFooOrBar() { 
    return fooOrBar; 
} 

당신은 당신이 찾고있는 동작을 얻기 위해 각 요소에 대해 별도의 속성이 필요합니다. 기본적으로 JAXB는 null 값을 사용하여 속성을 마샬링하지 않으므로 찾고있는 XML을 생성 할 수 있습니다.

public XMLGregorianCalendar getFoo() { 
    return foo; 
} 

@XmlSchemaType(name="time") 
public XMLGregorianCalendar getFoo() { 
    return foo; 
} 
+0

나는 블레이즈를 꽤 얻지 못했습니다. 이는 스키마 유형의 선택 사항을 유지하는 것과 관련됩니다. Null은 걱정거리가 아닙니다. –