正在为 MEdicationOrder 资源 HAPI - FHIR 构造 POST 请求消息

Constructing POST request message for MEdicationOrder Resource HAPI - FHIR

我正在编写 java 代码以使用 HAPI - FHIR DSTU2 HL7 中的 MedicationOrder 资源生成 POST 请求。我遇到过几个麻烦。

  1. 正在为包含的资源设置参考值。
  2. 生成的 XML 消息中不存在包含的资源。
  3. 操作结果为 HTTP/1.1 500 内部服务器错误,消息为 需要名为 'feed' 的外部元素,找到:MedicationOrder.

任何熟悉 MedicationOrder 资源的人都可以帮助我吗?

下面是java代码

public int sendMessage(MedicationOrder medicationOrder) throws   ClientProtocolException, IOException
{
  FhirContext ctx = FhirContext.forDstu2Hl7Org();
  IGenericClient client = ctx.newRestfulGenericClient("http://fhirtest.uhn.ca/baseDstu2");    
  HttpPost httpPost = new HttpPost("http://fhirtest.uhn.ca/baseDstu2");

  String message = ctx.newXmlParser().setPrettyPrint(true).encodeResourceToString(medicationOrder);
  httpPost.setEntity((HttpEntity) new StringEntity(message, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));

  org.apache.http.HttpResponse response = client.getHttpClient().execute(httpPost);
  return response.getStatusLine().getStatusCode();
}

如果界面抱怨 "feed",那么听起来您使用的是 DSTU 1 版本的 HAPI,而不是 DSTU2。 (在 DSTU 2 中 Feed 更改为 Bundle。)

看起来您将 HAPI 的客户端与 Apache HTTP 客户端层(它在 HAPI 的客户端内部,但您不需要直接交互)混淆了。

不用创建 HttpPost 对象,只需使用 HAPI 的客户端来执行创建:

MethodOutcome outcome = client.create()
  .resource(medicationOrder)
  .prettyPrint()
  .encodedJson()
  .execute();