2012-03-08 4 views

答えて

6
@XmlSchemaType(name = "normalizedString") 
private String normalized; 

は、XSD:normalizedStringでタイプは、XMLスキーマを生成する際に、このプロパティに対応する属性/要素に指定されます。 NormalizedStringAdapter

@XmlJavaTypeAdapter(NormalizedStringAdapter.class) 
private String normalized; 

は、非整列化操作中に作業を行います。ラインは、フィードキャリッジリターン、およびタブ文字が削除されます。

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <adapter>  A  B 
C  </adapter> 
    <schemaType>  A  B 
C  </schemaType> 
    <control>  A  B 
C  </control> 
</root> 

ルート

package forum383861; 

import javax.xml.bind.annotation.*; 
import javax.xml.bind.annotation.adapters.*; 

@XmlRootElement 
@XmlType(propOrder={"adapter", "schemaType", "control"}) 
public class Root { 

    private String adapter; 
    private String schemaType; 
    private String control; 

    @XmlJavaTypeAdapter(NormalizedStringAdapter.class) 
    public String getAdapter() { 
     return adapter; 
    } 

    public void setAdapter(String adpater) { 
     this.adapter = adpater; 
    } 

    @XmlSchemaType(name="normalizedString") 
    public String getSchemaType() { 
     return schemaType; 
    } 

    public void setSchemaType(String schemaType) { 
     this.schemaType = schemaType; 
    } 

    public String getControl() { 
     return control; 
    } 

    public void setControl(String control) { 
     this.control = control; 
    } 

} 

input.xmlにデモ

package forum383861; 

import java.io.*; 
import javax.xml.bind.*; 
import javax.xml.transform.Result; 
import javax.xml.transform.stream.StreamResult; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum383861/input.xml"); 
     Root root = (Root) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 

     System.out.println(); 

     jc.generateSchema(new SchemaOutputResolver() { 

      @Override 
      public Result createOutput(String arg0, String arg1) throws IOException { 
       StreamResult result = new StreamResult(System.out); 
       result.setSystemId(arg1); 
       return result; 
      } 

     }); 
    } 

} 

右出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<root> 
    <adapter>  A  B C  </adapter> 
    <schemaType>  A  B 
C  </schemaType> 
    <control>  A  B 
C  </control> 
</root> 

<?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="root" type="root"/> 

    <xs:complexType name="root"> 
    <xs:sequence> 
     <xs:element name="adapter" type="xs:string" minOccurs="0"/> 
     <xs:element name="schemaType" type="xs:normalizedString" minOccurs="0"/> 
     <xs:element name="control" type="xs:string" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

だから、 '@XmlSchemaType(名前= "normalizedStringで")POJOと元帥/ Unmarhalため' @XmlJavaTypeAdapter(NormalizedStringAdapter.class) 'と' XSDの生成、 ?ありがとうございました。 –

+0

'xs:token'のためのアダプタはありますか? –

+0

'xs:token'を気にしないでください。私は[CollapsedStringAdapter](http://docs.oracle.com/cd/E17409_01/javase/6/docs/api/javax/xml/bind/annotation/adapters/CollapsedStringAdapter.html)を見つけました。 :) –