2017-10-19 2 views
0

Ich benutze die Bibliothek fhir-net-api dstu2, eingehende FHIR JSON von einem Restful Web-Service zu XML in einer Biztalk-Pipeline-Komponente zu analysieren und dann an die übergeben XML-Disassembler zum Debuggen in BizTalk. Die meisten Nachrichten durchlaufen kein Problem, aber ich bekomme den folgenden Fehler in der gelegentlichen Nachricht.FHIR JSON zu XML Parsing Problem mit fhir-net-api stu2

"Ungültiges Zeichen in der angegebenen Codierung. Zeile 1, Position 12700.".

Ich habe die Nachrichten überprüft und kann keinen Unterschied im eingehenden JSON feststellen, der diesen Fehler verursachen würde. Mit Blick auf die in der Fehlermeldung angegebene Zeichenposition zeigt die XML-Ausgabe von der fhir-net-api das Problem unten an. Aus irgendeinem Grund schneidet die Bibliothek den Standort kurz ab und fügt ein Bündel-Tag ein. <Bundle xmlns="http://hl7.org/fhir"><total value="9" />

Haben Sie sich Gedanken darüber gemacht, was hier vor sich geht oder wie Sie vorgehen müssen?

Ich kann nicht die vollständigen Nachrichten posten, aber hier sind Schnipsel des Problembereichs.

Eingang JSON Snippet

"hospitalization": {"dischargeDiagnosis": [   { 
     "reference": "#Reason", 
     "display": "DWA-Discharged with Approval" 
    }]}, 
    "location": [{"location": {"display": "SPH 4th Bunny Dr’s Clinic"}}], 
    "serviceProvider": {"display": "FOO"} 
    }}, 
    {"resource":  { 
    "resourceType": "Encounter", 
    "id": "FOO0009-394a-4c51", 
    "extension":   [ 

XML-Output-Schnipsel

<hospitalization> 
    <dischargeDiagnosis> 
     <reference value="#Reason" /> 
     <display value="DWA-Discharged with Approval" /> 
    </dischargeDiagnosis> 
</hospitalization> 
<location> 
    <location> 
     <display value="SPH 4<Bundle xmlns="http://hl7.org/fhir"> 
         <total value="9" /> 
<entry> 
    <resource> 
     <Encounter> 

EDIT - ich isoliert das Problem Ressource und die Nachricht deidentifiziert. Hier ist die vollständige JSON-Nachricht, die den obigen Fehler verursacht. Ich versuchte das FHIR JSON zu XML Notepad ++ Plugin und es serialisiert die Nachricht korrekt.

Hier ist der Code aus der Pipeline-Komponente.

 Hl7.Fhir.Serialization.ResourceReader resourceReader = new Hl7.Fhir.Serialization.ResourceReader(FhirJsonParser.CreateFhirReader(json), ParserSettings.Default); 


    string resourceXmlString = Hl7.Fhir.Serialization.FhirSerializer.SerializeResourceToXml(resourceReader.Deserialize()); 

Hier ist die JSON, dass das Problem

{ 
    "resourceType": "Bundle", 
    "total": 1, 
    "entry": [ 
    {"resource":  { 
     "resourceType": "Encounter", 
     "id": "10000000-0000-0000-000-200000000", 
     "extension":   [ 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-facility", 
       "valueString": "St. Foo Hospital" 
      }, 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-service", 
       "valueString": "Foo PROGRAM/Foo ECHOCARDIOLOGY" 
      }, 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-patienttype", 
       "valueString": "Diagnostic - Outpatient" 
      }, 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-documentcount", 
       "valueInteger": 0 
      }, 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-entitysourcesystem", 
       "valueString": "CDR" 
      }, 
         { 
       "url": "https://foo.org/documents/fhir/extensions/encounter-mrnid", 
       "valueString": "10000000" 
      } 
     ], 
     "identifier":   [ 
         { 
       "use": "official", 
       "value": "1000000-5420-0000-0000-00000" 
      }, 
         { 
       "use": "secondary", 
       "value": "100000000000" 
      } 
     ], 
     "patient": {"reference": "Patient/000000000"}, 
     "participant":   [ 
         { 
       "type": [    { 
        "coding": [     { 
        "system": "http://hl7.org/fhir/v3/ParticipationType", 
        "code": "PRCP" 
        }], 
        "text": "Primary Care Physician" 
       }], 
       "individual": {"display": "Foo, Guy"} 
      }, 
         { 
       "type": [    { 
        "coding": [     { 
        "system": "http://hl7.org/fhir/v3/ParticipationType", 
        "code": "ATND" 
        }], 
        "text": "Attending Physician" 
       }], 
       "individual": {"display": "RFoo, JFoo L"} 
      } 
     ], 
     "period":   { 
      "start": "2015-10-27T13:59:00+00:00", 
      "end": "2017-02-17T09:39:07+00:00" 
     }, 
     "reason": [   { 
      "coding": [   { 
       "system": "http://www.ihtsdo.org/snomed-ct", 
       "code": "33962009" 
      }], 
      "text": "ECHOCARDIOGRAM" 
     }], 
     "hospitalization": {"dischargeDiagnosis": [   { 
      "reference": "#Reason", 
      "display": "DWA-Discharged with Approval" 
     }]}, 
     "location": [{"location": {"display": "SPH 4th Foo Dr’s Clinic"}}], 
     "serviceProvider": {"display": "Foo_foo"} 
     }} 

    ] 
} 
+0

Ich denke, das Problem könnte sein, dass der Apostroph in "Drs" ist Hex E28099, Recht Anführungszeichen, anstelle der erwarteten hex 27 Apostroph. – David

+0

Dies führt zu einer zweiten Frage von, ist der Hex-Wert E28099 erlaubt in der FHIR-JSON-Nachricht. Soll ich dieses Problem an den Dienstanbieter zurücksenden oder die fehlerhaften Daten selbst behandeln? – David

Antwort

1

die Fehlermeldung „Ungültige Zeichen in der angegebenen Codierung“ erscheint nicht in der Fhir .NET API Quellcode verursacht, ist es jedoch nicht die Oberfläche auf google im Kontext des .NET XmlReader. Also, meine erste Vermutung ist, dass der JSON in Ordnung geparst wird (es ist vollkommen in Ordnung, irgendeinen Unicode-Zeichenbalken in einer JSON-Zeichenkette zu haben), dann wird er in XML umgewandelt, wo der Charakter nicht maskiert wird. Wenn BizTalk dann das XML verarbeitet, tritt es in Schwierigkeiten auf.

Das ist interessant, angesichts der Tatsache, dass ich nur die .NET XML-Bibliotheken verwenden, um in XML zu serialisieren, so sollte es nicht illegales XML erzeugen. Vielleicht - und das ist auf der BizTalk-Seite - gibt es eine Einstellung, um die Codierung anzugeben, die in der XML-Pipeline in BizTalk verwendet wird?

+0

Hallo Ewout - Danke für die Antwort, der Fehler wird durch den XML-Disassembler generiert, nachdem die Fhir-Net-API den JSON nach XML serialisiert. Das erzeugte XML ist nicht korrekt und hat ein zweites Bundle-Tag genau an dem Punkt eingefügt, an dem es auf das "richtige Zitat" -Zeichen trifft. (Siehe unten) ich in der Lage, die xml zu reproduzieren Ausgabe oben in einem eigenständigen Komponententest, so dass es nicht BizTalk verwandt scheint. – David

+0

Hallo David, würde es Ihnen etwas ausmachen, das Beispiel, das Sie hier haben, zu posten + diese beiden Zeilen, die Sie nach https://github.com/ewoutkramer/fhir-net-api/issues reproduzieren sollten. Ich könnte es für Sie tun, aber wenn Sie es dort hinzufügen, können Sie den Fortschritt des Problems verfolgen. –