marshalling不能与marklogic中的jaxbhandle一起工作

lndjwyie  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(518)

我想将以下对象存储到marklogic中。

  1. @XmlRootElement(name = "trainModel")
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. public class TrainedModel implements Serializable {
  4. private static final long serialVersionUID = 1L;
  5. private String modelName;
  6. private CrossValidatorModel crossValidatorModel;
  7. public String getModelName() {
  8. return modelName;
  9. }
  10. public void setModelName(String modelName) {
  11. this.modelName = modelName;
  12. }
  13. public CrossValidatorModel getCrossValidatorModel() {
  14. return crossValidatorModel;
  15. }
  16. public void setCrossValidatorModel(CrossValidatorModel crossValidatorModel) {
  17. this.crossValidatorModel = crossValidatorModel;
  18. }
  19. @Override
  20. public String toString() {
  21. return "TrainedModel [modelName=" + modelName + ", crossValidatorModel=" + crossValidatorModel + "]";
  22. }
  23. }

我正在使用jaxbhandle来完成我的需求,但是在将trainedmodel对象存储到marklogic时,crossvalidatormodel变空了。
crossvalidatormodel是由提供的外部对象 org.apache.spark.ml.tuning.CrossValidatorModel .
我试过下面的代码,

  1. CrossValidatorModel crossValidatorModel = createDataFrame(null);
  2. TrainedModel trainedModel = new TrainedModel();
  3. trainedModel.setModelName("sample");
  4. trainedModel.setCrossValidatorModel(crossValidatorModel);
  5. JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
  6. JAXBHandle<TrainedModel> jaxbHandle = new JAXBHandle<TrainedModel>(context);
  7. jaxbHandle.set(trainedModel);
  8. GenericDocumentManager docMgr = client.newDocumentManager();
  9. docMgr.writeAs("/shivling.xml", null, jaxbHandle);

这是我得到的xml结果,

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <trainModel>
  3. <modelName>sample</modelName>
  4. <crossValidatorModel>
  5. </crossValidatorModel>
  6. </trainModel>

crossvalidatormodel在此为空,请帮助我解决此问题。

btxsgosb

btxsgosb1#

null(在代码中)在xml中产生影响:结果表明代码中存在语义问题。
jaxb框架可以通过适当的marklogic文档管理器或旧的pojo方式交付:
一个简单的marklogic jaxb注解(在批量读写事务中使用dmsdk):
代码段:

  1. XMLDocumentManager docMgr = marklogic.newXMLDocumentManager();
  2. TrainedModel trainedModel = new TrainedModel();
  3. trainedModel.setModelName("History and Psychology");
  4. trainedModel.setCrossValidatorModel("Biology");
  5. String docId = "/train-model.xml";
  6. docMgr.writeAs(docId, trainedModel);

结果:

subpar io方法:

  1. TrainedModel trainedModel = new TrainedModel();
  2. trainedModel.setModelName("History and Current Affairs");
  3. trainedModel.setCrossValidatorModel("Psychology");
  4. // initialize JAXB
  5. JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
  6. // POJO Handle
  7. JAXBHandle<TrainedModel> writeHandle = new JAXBHandle<TrainedModel>(context);
  8. // Marshalling
  9. Marshaller jaxMar = context.createMarshaller();
  10. String docId = "/train-model.xml";
  11. // IsMarshalled
  12. jaxMar.marshal(trainedModel, System.out);
  13. // set Handle
  14. writeHandle.set(trainedModel);
  15. // write POJO to MarkLogic
  16. docMgr.write(docId, writeHandle);
展开查看全部

相关问题