1
我在使用Moxy編組/解組Salesforce出站郵件XML時遇到問題。那我得到的例外是:DescriptorException如果使用EclipseLink JAXB(MOXy)解組XML時出現「Missing class indicator field from database row」異常
javax.xml.bind.JAXBException
- with linked exception:
[Exception [EclipseLink-44] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing class indicator field from database row [UnmarshalRecord()].
Descriptor: XMLDescriptor(service.salesforce.model.SObject --> [])]
,我有這些類:
@XmlSeeAlso({Account.class, Opportunity.class})
@XmlDiscriminatorNode("@type")
public abstract class SObject {
public abstract String getId();
public abstract void setId(String id);
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlDiscriminatorValue("sf:Opportunity")
public class Opportunity extends SObject {
@XmlElement(name = "Id", namespace = "urn:sobject.enterprise.soap.sforce.com")
private String id;
@XmlElement(name = "AccountId", namespace = "urn:sobject.enterprise.soap.sforce.com")
private String accountId;
@XmlElement(name = "StageName", namespace = "urn:sobject.enterprise.soap.sforce.com")
private String stageName;
@XmlElement(name = "Agreement_Date_Signed__c", namespace = "urn:sobject.enterprise.soap.sforce.com")
private Date agreementDateSigned;
@XmlElement(name = "Agreement_Date_Start__c", namespace = "urn:sobject.enterprise.soap.sforce.com")
private Date agreementDateStart;
@XmlElement(name = "Payment_Method__c", namespace = "urn:sobject.enterprise.soap.sforce.com")
private String paymentMethod;
// getters and setters...
}
,我試圖來解組的XML是:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:out="http://soap.sforce.com/2005/09/outbound" xmlns:urn="urn:sobject.enterprise.soap.sforce.com">
<soapenv:Header/>
<soapenv:Body>
<out:notifications>
<out:OrganizationId>123456789123456789</out:OrganizationId>
<out:ActionId>123456789123456789</out:ActionId>
<out:SessionId>sessId</out:SessionId>
<out:EnterpriseUrl>http://www.enterpriseexample.com</out:EnterpriseUrl>
<out:PartnerUrl>http://www.partnerexample.com</out:PartnerUrl>
<out:Notification>
<out:Id>987654321987654321</out:Id>
<out:sObject xsi:type="sf:Opportunity" xmlns:sf="urn:sobject.enterprise.soap.sforce.com">
<urn:Id>121212121212121212</urn:Id>
<urn:AccountId>121212121212121212</urn:AccountId>
<urn:Agreement_Date_Signed__c>2012-01-01T08:34:56Z</urn:Agreement_Date_Signed__c>
<urn:Agreement_Date_Start__c>2012-02-01</urn:Agreement_Date_Start__c>
<urn:StageName>Booking</urn:StageName>
</out:sObject>
</out:Notification>
</out:notifications>
</soapenv:Body>
</soapenv:Envelope>
任何想法?
我將需要使用'SF:Opportunity'爲'@ XmlType'名稱或只是'Opportunity'?我現在沒有工作電腦,所以我會明天嘗試 – ryanprayogo 2012-03-27 02:12:42
這似乎並不奏效。我嘗試了你的建議,我仍然得到同樣的例外。 – ryanprayogo 2012-03-27 14:34:00
@ryanprayogo - 我用更完整的例子加強了我的答案。我希望這有幫助。 – 2012-03-27 18:11:39