2012-03-25 15 views
1

JAXBを使用してWebサービスで.xmlを非整列化するときに問題があります。JAXBを使用して非整列化を行うには

これは、一部のクライアントからWebサービスに送信される.xmlファイルです。

<?xml version="1.0" encoding="UTF-8"?> 
<PERSON xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="file:/D:/MyWorkSpace/JAVA%20WEB%20Services%20DEVELOPER/XML%20Workspace/Persons.xsd"> 
    <NAME>Michael</NAME> 
    <AGE>12</AGE> 
    <ADRESS> 
     <STREET>Somewhere in Spain</STREET> 
     <ZIP>47015</ZIP> 
    </ADRESS> 
    <HOBY indoorHoby="true"/> 
</PERSON> 

このマーシャリング解除

@POST 
    @Path("/XMLArrivalBeacon") 
    @Consumes(MediaType.APPLICATION_XML) 
    public Response methodI(String content) { 
     System.out.print(content); 
     try { 
      //Unmarshaling    
      JAXBContext context = JAXBContext.newInstance(Person.class); 
      Unmarshaller unmarshaller = context.createUnmarshaller(); 
      //Unmarshal the String 
      Person person = (Person) unmarshaller.unmarshal(new StreamSource(new StringReader(content))); 
      //Checking that the values were recieved ok 
      System.out.print(person.getName()); 
      return Response.ok("XML recieved from client!!!").build(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

をここで行います方法は、JAXB注釈で注釈さPersonクラスです(自動的にスキーマから生成されました)

package bindedschemas; 

import java.math.BigInteger; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 


/** 
* <p>Java class for anonymous complex type. 
* 
* <p>The following schema fragment specifies the expected content contained within this class. 
* 
* <pre> 
* &lt;complexType> 
* &lt;complexContent> 
*  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*  &lt;sequence> 
*   &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*   &lt;element name="age"> 
*   &lt;simpleType> 
*    &lt;restriction base="{http://www.w3.org/2001/XMLSchema}integer"> 
*    &lt;minInclusive value="18"/> 
*    &lt;/restriction> 
*   &lt;/simpleType> 
*   &lt;/element> 
*   &lt;element name="address"> 
*   &lt;complexType> 
*    &lt;complexContent> 
*    &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*     &lt;sequence> 
*     &lt;element name="street" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*     &lt;element name="zip" type="{http://www.w3.org/2001/XMLSchema}string"/> 
*     &lt;/sequence> 
*     &lt;attribute name="country" type="{http://www.w3.org/2001/XMLSchema}string" /> 
*    &lt;/restriction> 
*    &lt;/complexContent> 
*   &lt;/complexType> 
*   &lt;/element> 
*   &lt;element name="hobie"> 
*   &lt;simpleType> 
*    &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"> 
*    &lt;/restriction> 
*   &lt;/simpleType> 
*   &lt;/element> 
*  &lt;/sequence> 
*  &lt;/restriction> 
* &lt;/complexContent> 
* &lt;/complexType> 
* </pre> 
* 
* 
*/ 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "name", 
    "age", 
    "address", 
    "hobie" 
}) 
@XmlRootElement(name = "Person") 
public class Person { 

    @XmlElement(required = true) 
    protected String name; 
    @XmlElement(required = true) 
    protected BigInteger age; 
    @XmlElement(required = true) 
    protected Person.Address address; 
    @XmlElement(required = true) 
    protected String hobie; 

    /** 
    * Gets the value of the name property. 
    * 
    * @return 
    *  possible object is 
    *  {@link String } 
    *  
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * Sets the value of the name property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link String } 
    *  
    */ 
    public void setName(String value) { 
     this.name = value; 
    } 

    /** 
    * Gets the value of the age property. 
    * 
    * @return 
    *  possible object is 
    *  {@link BigInteger } 
    *  
    */ 
    public BigInteger getAge() { 
     return age; 
    } 

    /** 
    * Sets the value of the age property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link BigInteger } 
    *  
    */ 
    public void setAge(BigInteger value) { 
     this.age = value; 
    } 

    /** 
    * Gets the value of the address property. 
    * 
    * @return 
    *  possible object is 
    *  {@link Person.Address } 
    *  
    */ 
    public Person.Address getAddress() { 
     return address; 
    } 

    /** 
    * Sets the value of the address property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link Person.Address } 
    *  
    */ 
    public void setAddress(Person.Address value) { 
     this.address = value; 
    } 

    /** 
    * Gets the value of the hobie property. 
    * 
    * @return 
    *  possible object is 
    *  {@link String } 
    *  
    */ 
    public String getHobie() { 
     return hobie; 
    } 

    /** 
    * Sets the value of the hobie property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link String } 
    *  
    */ 
    public void setHobie(String value) { 
     this.hobie = value; 
    } 


    /** 
    * <p>Java class for anonymous complex type. 
    * 
    * <p>The following schema fragment specifies the expected content contained within this class. 
    * 
    * <pre> 
    * &lt;complexType> 
    * &lt;complexContent> 
    *  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
    *  &lt;sequence> 
    *   &lt;element name="street" type="{http://www.w3.org/2001/XMLSchema}string"/> 
    *   &lt;element name="zip" type="{http://www.w3.org/2001/XMLSchema}string"/> 
    *  &lt;/sequence> 
    *  &lt;attribute name="country" type="{http://www.w3.org/2001/XMLSchema}string" /> 
    *  &lt;/restriction> 
    * &lt;/complexContent> 
    * &lt;/complexType> 
    * </pre> 
    * 
    * 
    */ 
    @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "street", 
     "zip" 
    }) 
    public static class Address { 

     @XmlElement(required = true) 
     protected String street; 
     @XmlElement(required = true) 
     protected String zip; 
     @XmlAttribute(name = "country") 
     protected String country; 

     /** 
     * Gets the value of the street property. 
     * 
     * @return 
     *  possible object is 
     *  {@link String } 
     *  
     */ 
     public String getStreet() { 
      return street; 
     } 

     /** 
     * Sets the value of the street property. 
     * 
     * @param value 
     *  allowed object is 
     *  {@link String } 
     *  
     */ 
     public void setStreet(String value) { 
      this.street = value; 
     } 

     /** 
     * Gets the value of the zip property. 
     * 
     * @return 
     *  possible object is 
     *  {@link String } 
     *  
     */ 
     public String getZip() { 
      return zip; 
     } 

     /** 
     * Sets the value of the zip property. 
     * 
     * @param value 
     *  allowed object is 
     *  {@link String } 
     *  
     */ 
     public void setZip(String value) { 
      this.zip = value; 
     } 

     /** 
     * Gets the value of the country property. 
     * 
     * @return 
     *  possible object is 
     *  {@link String } 
     *  
     */ 
     public String getCountry() { 
      return country; 
     } 

     /** 
     * Sets the value of the country property. 
     * 
     * @param value 
     *  allowed object is 
     *  {@link String } 
     *  
     */ 
     public void setCountry(String value) { 
      this.country = value; 
     } 

    } 

} 

これは例外です私は

SEVERE取得に:javax.xml.bind.UnmarshalException:予期しない要素(URI: ""、 ローカル: "PERSON")。予想される要素は< {} Person> at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662) at com.sun.xml.bind.v2.runtime.unmarshaller .Loader.reportError com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253)で(Loader.java:258)

私は修正することができますどのように任意のアイデアそれ?

答えて

6

あなたのXMLはあなたのスキーマと一致しません。 xmlの要素名はで、大文字と小文字が区別されますです。 「PERSON」と「Person」はではなく、同じ要素のです。

+1

はい、それでした。愚かな間違い: ありがとう – sfrj

関連する問題