2011-05-04 5 views
1

* * 편집 - 결국 나는 기능이 얻을 수있는 추상적 인 확장을 제거, 블 레즈에서 아래의 대답은 다음JAXB 값은

안녕하세요 작동합니다.

<xs:complexType name="AbstractWorkflow" abstract="true"> 
    <xs:attribute name="id" type="xs:ID" use="required"/> 
</xs:complexType> 
<xs:complexType name="ProcessWorkflow" mixed="true"> 
    <xs:complexContent> 
     <xs:extension base="AbstractWorkflow"/> 
    </xs:complexContent> 
</xs:complexType> 

비 정렬 화되는 입력이

<ns1:Workflow stb:id="Workflow" xsi:type="ns1:ProcessWorkflow">workflowHTML.xml</ns1:Workflow> 

입니다하지만이 작업을 수행 할 때이 값에 액세스 할 수있는 옵션을 얻을 :
나는 나의 스키마의 복잡한 유형이에서 workflowHTML.xml을 xjc에서 생성 된 클래스 . 이것은 생성 된 AbstractWorkflow 클래스 의 시작입니다.이 클래스에서 선언 할 수있는 주석이 있습니다.이 클래스는 추상 클래스를 확장하여 값을 전달하는 요소임을 지정합니다. 필드 나 필드로 선언하지 마십시오.

편집 내가 원래 가지고 있던 추상 클래스가 아닌 값의 읽기를 구현하는 데 필요한 확장 클래스입니다.

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER) 
@XmlType(name = "ProcessWorkflow") 
public class ProcessWorkflow 
    extends AbstractWorkflow 
{ 



} 

감사합니다.

답변

3

@XmlValue 주석을 찾고 있다고 생각합니다.

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class Foo { 

    @XmlAttribute 
    private int id; 

    @XmlValue 
    private String value; 

} 

다음 XML 스키마 위의 대응

이 같은

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="foo" type="foo"/> 

    <xs:complexType name="foo"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="id" type="xs:int" use="required"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:schema> 

그리고 XML : 응답 블 레즈에 대한

<foo id="123">Some Value</foo> 
+0

감사합니다. 나는 원래의 질문을 편집했다. 이미 추상 클래스를 확장 할 때 내 상황에서는 작동하지 않습니다. 내 스키마 정의에서 ProcessWorkflow는 값을 전달하는 것입니다. 그래서 이미 확장 태그를 사용했습니다. 또한 @XmlValue를 포함하도록 클래스를 직접 편집하는 경우 @XmlValue로 인사합니다. 다른 클래스를 파생시키는 클래스에서는 사용할 수 없습니다. ** 내 질문을 명확히하기 위해 다른 클래스를 확장/파생시키는 클래스에 값을 추가하는 방법이 있습니까? ** – Gurnard

+0

@Gurnard - 현재 EclipseLink JAXB (MOXy), https : //에서 관련 버그를 수정하고 있습니다. bugs.eclipse.org/336099. 부모 클래스가 요소에 아무것도 매핑하지 않는 한 자식 클래스의 값에 매핑 할 수 있어야합니다. 이 버그는 JAXB 참조 구현에도 존재합니다. 이 수정 사항을 체크 인하면 MOXy를 JAXB 구현으로 사용하여 문제를 해결할 수 있습니다. http://www.eclipse.org/eclipselink/moxy.php –

+0

오. MOXy는 네임 스페이스 접두어 대신 package-info.java를 사용합니까? JAXB의 jdk1.6.0_24 구현은 이와 같이 작동하지 않으므로이 네임 스페이스 문제에 대해서는 잘 작동하는 Sun 구현을 사용하도록 변경했습니다. 또 다른 구현으로 옮길 까봐 걱정됩니다. :-) – Gurnard