2014-01-25 50 views
1

我想解組使用jaxb的xacml響應,但我得到意想不到的元素錯誤。unmarshalling xacml響應時出現錯誤?

這是我的主要方法:

String str="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ 
        "<Response xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\">"+ 
        "<Result>"+ 
        "<Decision>Permit</Decision>"+ 
        "<Status>"+ 
        "<StatusCode Value=\"urn:oasis:names:tc:xacml:1.0:status:ok\"/>"+ 
        "</Status>"+ 
        "<Obligations>"+ 
        "<Obligation ObligationId=\"permitRule1Obligation\">"+ 
        "<AttributeAssignment AttributeId=\"urn:oasis:names:tc:xacml:2.0:example:attribute:text\" DataType=\"http://www.w3.org/2001/XMLSchema#string\">permitRule1</AttributeAssignment>"+ 
        "</Obligation>"+ 
        "<Obligation ObligationId=\"permitPolicyObligation\">"+ 
        "<AttributeAssignment AttributeId=\"urn:oasis:names:tc:xacml:2.0:example:attribute:text\" DataType=\"http://www.w3.org/2001/XMLSchema#string\">permitObligation</AttributeAssignment>"+ 
        "</Obligation>"+ 
        "</Obligations>"+ 
        "</Result>"+ 
        "</Response>"; 
     StringBuffer buf = new StringBuffer(str); 
     JAXBContext jc = JAXBContext.newInstance("com.test.response1"); 
     Unmarshaller u = jc.createUnmarshaller(); 
     Response response = (Response)(u.unmarshal(new ByteArrayInputStream(buf.toString().getBytes()))); 
     String des= response.getResult().getDecision(); 
     System.out.println("Decision is: "+des); 

在這裏,我傳遞XML字符串。這是爲了更好地理解XML:

<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"> 
    <Result> 
     <Decision>Deny</Decision> 
     <Status> 
      <StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok" /> 
     </Status> 
     <Obligations> 
      <Obligation ObligationId="denyRule3Obligation"> 
       <AttributeAssignment 
        AttributeId="urn:oasis:names:tc:xacml:2.0:example:attribute:text" 
        DataType="http://www.w3.org/2001/XMLSchema#string">denyRule3</AttributeAssignment> 
      </Obligation> 
      <Obligation ObligationId="denyPolicyObligation"> 
       <AttributeAssignment 
        AttributeId="urn:oasis:names:tc:xacml:2.0:example:attribute:text" 
        DataType="http://www.w3.org/2001/XMLSchema#string">denyObligation</AttributeAssignment> 
      </Obligation> 
     </Obligations> 
    </Result> 
</Response> 

這裏是Response類:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "Response", propOrder = {"result"}) 
@XmlRootElement 
public class Response 
{ 
    @XmlElement(name = "Result", required = true) 
    protected Result result; 


    public Result getResult() 
    { 
     return result; 
    } 

    public void setResult(Result result) 
    { 
     this.result= result; 
    } 
} 

錯誤我得到:

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17", local:"Response"). Expected elements are <{}AttributeAssignment>,<{}Decision>,<{}Value>,<{}response> 

請幫我爲什麼我收到此異常?

回答

相關問題