没有为属性[CO]

时间:2018-04-06 12:43:39

标签: jaxb eclipselink moxy

我有一个xsd,它包含一个实体Taddress,它具有一个具有枚举类型的属性country_code。我无法将xml编组出根实体,因为它会抛出异常,如下所示

  

javax.xml.bind.MarshalException     - 链接异常:[Exception [EclipseLink-25003](Eclipse Persistence Services - 2.5.0.v20130507-3faac2b):   org.eclipse.persistence.exceptions.XMLMarshalException异常   说明:编组对象内部时发生错误   例外:异常[EclipseLink-115](Eclipse持久性服务 -   2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DescriptorException异常   描述:没有为属性[CO]提供转换值。   制图:   org.eclipse.persistence.oxm.mappings.XMLDirectMapping [COUNTRYCODE - > COUNTRY_CODE /文本()]   描述符:XMLDescriptor(generated.TAddress - > [])] at   org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:403)     在   com.crrinfra.dynamicOutputgen.utils.HelloWorld.generateTransaction(HelloWorld.java:52)     在   com.crrinfra.dynamicOutputgen.utils.XMLUtilities.generateJaxBContext(XMLUtilities.java:259)     在   com.crrinfra.dynamicOutputgen.utils.DynamicXSDLoader.populateCache(DynamicXSDLoader.java:48)     在   com..crrinfra.dynamicOutputgen.DynamicOutputXSDParser.main(DynamicOutputXSDParser.java:16)   引起:异常[EclipseLink-25003](Eclipse Persistence Services    - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.XMLMarshalException异常   说明:编组对象内部时发生错误   例外:异常[EclipseLink-115](Eclipse持久性服务 -   2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DescriptorException异常   描述:没有为属性[CO]提供转换值。   制图:   org.eclipse.persistence.oxm.mappings.XMLDirectMapping [COUNTRYCODE - > COUNTRY_CODE /文本()]   描述符:XMLDescriptor(generated.TAddress - > [])at   org.eclipse.persistence.exceptions.XMLMarshalException.marshalException(XMLMarshalException.java:97)     在   org.eclipse.persistence.internal.oxm.XMLMarshaller.marshal(XMLMarshaller.java:911)     在   org.eclipse.persistence.internal.oxm.XMLMarshaller.marshal(XMLMarshaller.java:848)     在   org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:401)     ......还有4个

公共类HelloWorld {

public static void generateTransaction(DynamicJAXBContext jaxbContext) throws JAXBException, NoSuchFieldException, SecurityException{
    DynamicEntity entity = jaxbContext.newDynamicEntity("generated.Report");
    DynamicType type = jaxbContext.getDynamicType("generated.Report");

    DynamicEntity childEntity3 = jaxbContext.newDynamicEntity("generated.TAddress");
    DynamicType type1 = jaxbContext.getDynamicType("generated.TAddress");
    childEntity3.set("addressType", "M");
    childEntity3.set("address", "XXXX");
    childEntity3.set("town", "XXX");
    childEntity3.set("city", "XXXXX");
    childEntity3.set("zip", "751006");
    childEntity3.set("countryCode", "CO");
    childEntity3.set("state", "OD");
    childEntity3.set("comments", "Permanent Address");
    entity.set("location", childEntity3);

    XMLDirectMapping enumMappings = (XMLDirectMapping) ((DynamicTypeImpl) type1).getMapping("countryCode");
    System.out.println(enumMappings.isDirectToFieldMapping());
    JAXBMarshaller marshaller = jaxbContext.createMarshaller();
    marshaller.marshal(entity, System.out);
}

}

请告知如何设置酒店。我已经用这个问题上传了xsd

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案,因此想到关闭这个帖子。我很乐意收到有关此方法的反馈

public class EnumAttributeHandler implements IAttributeHandler {    
DynamicTypeImpl typeAttr;
public EnumAttributeHandler(DynamicTypeImpl typeAttr) {
    // TODO Auto-generated constructor stub
    this.typeAttr=typeAttr;
}
@Override
public DynamicEntity attributeSetter(CRROutputAttributePojo attrPojo, DynamicEntity currentEntitytag, HashMap<String, Object> params,String setterValue) throws CRROutputGenException {
    // TODO Auto-generated method stub
    XMLDirectMapping enumMappings = (XMLDirectMapping) (typeAttr)
            .getMapping(attrPojo.getActualAttrName());
    EnumTypeConverter converter=null;
    if(enumMappings.getConverter() instanceof EnumTypeConverter)
        converter = (EnumTypeConverter) enumMappings.getConverter();
    else 
        throw new CRROutputGenException("Invalid type of converter");
    try {
        if (setterValue != null) {
            Object enumField = ((DynamicJAXBContext) params.get("jaxbContext")).getEnumConstant(converter.getEnumClassName().toString(), setterValue);
            currentEntitytag.set(attrPojo.getActualAttrName(), enumField);
        }
    }catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        throw new CRROutputGenException(e.getMessage());
    }
return  currentEntitytag;
}
}