Marshalling 在 MarkLogic 中不与 JAXBHandle 一起工作
Marshalling is not working with JAXBHandle in MarkLogic
我想将以下对象存储到 MarkLogic。
@XmlRootElement(name = "trainModel")
@XmlAccessorType(XmlAccessType.FIELD)
public class TrainedModel implements Serializable {
private static final long serialVersionUID = 1L;
private String modelName;
private CrossValidatorModel crossValidatorModel;
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public CrossValidatorModel getCrossValidatorModel() {
return crossValidatorModel;
}
public void setCrossValidatorModel(CrossValidatorModel crossValidatorModel) {
this.crossValidatorModel = crossValidatorModel;
}
@Override
public String toString() {
return "TrainedModel [modelName=" + modelName + ", crossValidatorModel=" + crossValidatorModel + "]";
}
}
我正在使用 JAXBHandle 来完成我的要求,但是在将 TrainedModel 对象存储到 MarkLogic 时,CrossValidatorModel 变空了。
CrossValidatorModel 是 org.apache.spark.ml.tuning.CrossValidatorModel
提供的外部对象。
我试过下面的代码,
CrossValidatorModel crossValidatorModel = createDataFrame(null);
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("sample");
trainedModel.setCrossValidatorModel(crossValidatorModel);
JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
JAXBHandle<TrainedModel> jaxbHandle = new JAXBHandle<TrainedModel>(context);
jaxbHandle.set(trainedModel);
GenericDocumentManager docMgr = client.newDocumentManager();
docMgr.writeAs("/shivling.xml", null, jaxbHandle);
这是我得到的 xml 结果,
<?xml version="1.0" encoding="UTF-8"?>
<trainModel>
<modelName>sample</modelName>
<crossValidatorModel>
</crossValidatorModel>
</trainModel>
crossValidatorModel 在这里是空的,请帮我解决这个问题。
NULL(在您的代码中)在 XML 中具有 反响:您的结果表明代码中存在语义问题。
JAXB framework can be delivered through proper MarkLogic Document Manager or old POJO way:
A simple MarkLogic JAXB annotation (You would use DMSDK in bulk read | write transactions):
Code Snippet:
XMLDocumentManager docMgr = marklogic.newXMLDocumentManager();
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("History and Psychology");
trainedModel.setCrossValidatorModel("Biology");
String docId = "/train-model.xml";
docMgr.writeAs(docId, trainedModel);
Result:
Subpar IO method:
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("History and Current Affairs");
trainedModel.setCrossValidatorModel("Psychology");
// initialize JAXB
JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
// POJO Handle
JAXBHandle<TrainedModel> writeHandle = new JAXBHandle<TrainedModel>(context);
// Marshalling
Marshaller jaxMar = context.createMarshaller();
String docId = "/train-model.xml";
// IsMarshalled
jaxMar.marshal(trainedModel, System.out);
// set Handle
writeHandle.set(trainedModel);
// write POJO to MarkLogic
docMgr.write(docId, writeHandle);
我想将以下对象存储到 MarkLogic。
@XmlRootElement(name = "trainModel")
@XmlAccessorType(XmlAccessType.FIELD)
public class TrainedModel implements Serializable {
private static final long serialVersionUID = 1L;
private String modelName;
private CrossValidatorModel crossValidatorModel;
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public CrossValidatorModel getCrossValidatorModel() {
return crossValidatorModel;
}
public void setCrossValidatorModel(CrossValidatorModel crossValidatorModel) {
this.crossValidatorModel = crossValidatorModel;
}
@Override
public String toString() {
return "TrainedModel [modelName=" + modelName + ", crossValidatorModel=" + crossValidatorModel + "]";
}
}
我正在使用 JAXBHandle 来完成我的要求,但是在将 TrainedModel 对象存储到 MarkLogic 时,CrossValidatorModel 变空了。
CrossValidatorModel 是 org.apache.spark.ml.tuning.CrossValidatorModel
提供的外部对象。
我试过下面的代码,
CrossValidatorModel crossValidatorModel = createDataFrame(null);
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("sample");
trainedModel.setCrossValidatorModel(crossValidatorModel);
JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
JAXBHandle<TrainedModel> jaxbHandle = new JAXBHandle<TrainedModel>(context);
jaxbHandle.set(trainedModel);
GenericDocumentManager docMgr = client.newDocumentManager();
docMgr.writeAs("/shivling.xml", null, jaxbHandle);
这是我得到的 xml 结果,
<?xml version="1.0" encoding="UTF-8"?>
<trainModel>
<modelName>sample</modelName>
<crossValidatorModel>
</crossValidatorModel>
</trainModel>
crossValidatorModel 在这里是空的,请帮我解决这个问题。
NULL(在您的代码中)在 XML 中具有 反响:您的结果表明代码中存在语义问题。
JAXB framework can be delivered through proper MarkLogic Document Manager or old POJO way:
A simple MarkLogic JAXB annotation (You would use DMSDK in bulk read | write transactions):
Code Snippet:
XMLDocumentManager docMgr = marklogic.newXMLDocumentManager();
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("History and Psychology");
trainedModel.setCrossValidatorModel("Biology");
String docId = "/train-model.xml";
docMgr.writeAs(docId, trainedModel);
Result:
Subpar IO method:
TrainedModel trainedModel = new TrainedModel();
trainedModel.setModelName("History and Current Affairs");
trainedModel.setCrossValidatorModel("Psychology");
// initialize JAXB
JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
// POJO Handle
JAXBHandle<TrainedModel> writeHandle = new JAXBHandle<TrainedModel>(context);
// Marshalling
Marshaller jaxMar = context.createMarshaller();
String docId = "/train-model.xml";
// IsMarshalled
jaxMar.marshal(trainedModel, System.out);
// set Handle
writeHandle.set(trainedModel);
// write POJO to MarkLogic
docMgr.write(docId, writeHandle);