2017-10-19 15 views
0

bhtalk 파이프 라인 구성 요소의 Restful 웹 서비스에서 XML로 들어오는 FHIR JSON을 구문 분석 한 다음이를 라이브러리로 전달합니다. BizTalk에서 debatching을위한 XML 디스어셈블러. 대부분의 메시지는 문제없이 진행되지만 가끔 메시지에 다음 오류가 표시됩니다.FHIR JSON과 fhir-net-api stu2의 XML 구문 분석 문제

"지정된 인코딩의 문자가 잘못되었습니다 (줄 1, 위치 12700)."

메시지를 검사했는데이 오류의 원인이되는 수신 JSON의 차이를 확인할 수 없습니다. 오류 메시지에 표시된 문자 위치를 보면 fhir-net-api의 XML 출력에 다음과 같은 문제가 표시됩니다. 어떤 이유로 라이브러리는 위치를 짧게 잘라서 번들 태그에 넣습니다. <Bundle xmlns="http://hl7.org/fhir"><total value="9" />

여기에서 무슨 일이 벌어지고 있는지 또는 문제 해결 방법을 생각해보십시오.

전체 메시지를 게시 할 수는 없지만 여기에는 문제 영역의 조각이 있습니다.

입력 JSON은

"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 조각을

<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> 

편집 니펫 - 나는 문제 리소스를 격리하고 메시지를 해제 확인했다. 위의 오류를 일으키는 전체 JSON 메시지는 다음과 같습니다. XML 메모장 ++ 플러그인에 FHIR JSON을 시도하고 올바르게 메시지를 직렬화합니다.

다음은 파이프 라인 구성 요소의 코드입니다. 여기

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


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

는 그러나에 표면 않습니다는 FHIR .NET API의 소스 코드에 표시되지 않는 문제를

{ 
    "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

"Dr 's"의 아포스트로피가 예상되는 16 진수 17 아포스트로피 대신 16 진수 E28099, 오른쪽 작은 따옴표 일 수 있습니다. – David

+0

이것은 두 번째 질문으로 이어집니다. FHIR JSON 메시지에서 16 진수 값 E28099가 허용됩니다. 이 문제를 서비스 제공 업체에 보내거나 불량 데이터를 직접 처리해야합니까? – David

답변

1

오류 메시지 "주어진 인코딩에 잘못된 문자"를 일으키는 원인이되는 JSON입니다 구글 XmlReader의 컨텍스트에서 구글. 그래서, 내 첫 번째 추측은 json이 파싱 된 것을 확인합니다 (어떤 json 문자열에 유니 코드 문자 막대를 포함하는 것이 완벽하게 가능합니다). 그런 다음 문자가 이스케이프되지 않는 XML로 바뀝니다. 그런 다음 BizTalk가 XML을 처리하면 문제가 발생합니다.

XML XML로 직렬화하기 위해 .NET XML 라이브러리 만 사용한다는 점에서 흥미로운 점은 잘못된 XML을 생성해서는 안된다는 것입니다. 아마도 BizTalk 측에 있습니다. BizTalk의 XML 파이프 라인에 사용되는 인코딩을 나타내는 설정이 있습니까?

+0

안녕하세요 Ewout - 응답 주셔서 감사합니다, fhir-net-api가 JSON을 XML로 serialize 한 후 xml 디스어셈블러가 오류를 생성합니다. 생성 된 XML이 올바르지 않고 "오른쪽 인용 부호"문자를 만나는 지점에 삽입 된 두 번째 번들 태그가 있습니다. <표시 값 (아래 참조) = "SPH 4 <번들의 xmlns ="http://hl7.org/fhir "> <전체 값 ="9 "/> I는 XML을 재현 할 수 있었다 위의 출력을 독립 실행 형 단위 테스트에서 사용하므로 BizTalk와 관련이없는 것처럼 보입니다. – David

+0

안녕하세요, David 님, 여기에있는 예와 함께이 두 줄을 https://github.com/ewoutkramer/fhir-net-api/issues에 게시 할 수 있습니까? 나는 당신을 위해 그것을 할 수 있지만, 거기에 그것을 추가하면, 당신은 문제에 대한 진도를 추적 할 수있을 것입니다. –