JAX-WS Java Client, WCF Service Compatibility: "400: Bad Request"

I also asked this question on the Mirth forum .

We are currently trying to connect to the WCF service using the Mirth open source integration mechanism. Mirth is Java-based, uses Mule internally, which uses JAX-WS. The WCF server returns an HTTP status code of "400: Bad Request". We do not have easy access to the WCF server.

Communication with the client works well in C #. In Visual Studio, add a service reference, and then in main ():

PatientRegistryQueryFulfiller.GetDemographicsClient svc = new PatientRegistryQueryFulfiller.GetDemographicsClient();
doc.Load(@"C:\MirthTesting\PRPA_EX201307NO_10_PatientReg_GetDemographics.xml");
PatientRegistryQueryFulfiller.PRPA_IN201307NO patientRegistryRequest = (PatientRegistryQueryFulfiller.PRPA_IN201307NO)ObjectSerializer.DeserializeObject(doc, typeof(PatientRegistryQueryFulfiller.PRPA_IN201307NO));
PatientRegistryQueryFulfiller.PRPA_IN201307NOResponse patientRegistryResponse = svc.GetDemographics(patientRegistryRequest);
doc = ObjectSerializer.SerializeObject(patientRegistryResponse.Item);

The auto-generated WCF client (from WSDL) has app.config with an endpoint, and this binding:

<bindings>
    <basicHttpBinding>
        <binding name="PatientRegistryQueryFulfiller_Binding" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="655360"
           maxBytesPerRead="4096" maxNameTableCharCount="655360" />
        <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
             realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

, - WCF-, - maxNameTableCharCount maxArrayLength readerQuotas , . , Mirth, .

Mirth v 2.2.1 ( ), Mirth , HL7v3. WCF-. -, WSDL. , . MTOM.

, JAX-WS WCF. ?

JAX-WS. , http: dispatch.getRequestContext(). put (JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192) ( WebServiceMessageDispatcher.Java 140)

:

ERROR-410: Web Service Connector error
ERROR MESSAGE: Error connecting to web service.
com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 400: Bad Request
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.doInvoke(Unknown Source)
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.invoke(Unknown Source)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.processMessage(WebServiceMessageDispatcher.java:176)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.doDispatch(WebServiceMessageDispatcher.java:106)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.doSend(WebServiceMessageDispatcher.java:204)
at org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:164)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:191)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:130)
at org.mule.routing.outbound.AbstractOutboundRouter.send(AbstractOutboundRouter.java:85)
at org.mule.routing.outbound.FilteringMulticastingRouter.route(FilteringMulticastingRouter.java:54)
at org.mule.routing.outbound.OutboundMessageRouter$1.doInTransaction(OutboundMessageRouter.java:78)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:48)
at org.mule.routing.outbound.OutboundMessageRouter.route(OutboundMessageRouter.java:82)
at org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:247)
at org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:209)
at org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java:277)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:201)
at org.mule.routing.inbound.InboundMessageRouter.send(InboundMessageRouter.java:176)
at org.mule.routing.inbound.InboundMessageRouter.route(InboundMessageRouter.java:143)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:487)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:266)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:225)
at com.mirth.connect.connectors.vm.VMMessageReceiver.getMessages(VMMessageReceiver.java:223)
at org.mule.providers.TransactedPollingMessageReceiver.poll(TransactedPollingMessageReceiver.java:108)
at org.mule.providers.PollingMessageReceiver.run(PollingMessageReceiver.java:97)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:290)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Unknown Source)
+5
1

. Mirth.

, - "400: ", , . "400 bad request" - .

, , , Mirth. . YMMV.

  • WSDL - (, EncounterManager) Mirth Server\public_html\EncounterManager, Mirth .
  • WSDL , , SOAP -:

: = "HTTP://-/HL7Connector/GetDemographicsService30/" /

  • Mirth, .
  • Mirth Connect , Sender
  • , - (, ). , C:\MirthTesting\. C:\MirthTesting\read
  • " ".
  • inbound = , = HL7, 1 = . , HL7.
  • " ".
  • " ", "patientIdWanted" "messageObject.getRawData()". Mirth , "", , ( ).
  • -. URL- WSDL (, http://localhost: 8080/EncounterManager/EncounterManagerQueryFulfiller.wsdl)
  • " ", " ".
  • SOAP HL7 ( ). , , HL7 cruft. .
  • , , SOAP. SOAP " ", . -. GetDemographics ( ). , ${patientIdWanted}, Mirth , , .
  • .
  • , - .
  • " ". , .
  • "Receiver" "Channel reader"
  • . , . C:\MirthTesting\\WebService-response.txt. ${message.rawData}, , Mirth.
  • , , .
  • , , .
  • C:\MirthTesting\uncread
  • Mirth ( "read" ). , ${patientIdWanted}. - SOAP . .

  • , - : . !
  • # Java
  • HL7,
  • Visual Studio #- , - #. ( Mirth WSDL, IIS)
  • Eclipse Java , - Java. SOAPUI ( , Mirth), Eclipse Indigo EE edition ( wsimport.bat)
  • Mirth Eclipse.
  • HTTP- ( Eclipse). " " . , Mirth ( Java) -: -Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump =

  • script , , Mirth:

    FileUtil.write('C:/MirthTesting/read/sender_preprocessmessage_in.txt', false, message);return message;
    
  • post-processes script , , Mirth:

    FileUtil.write('C:/MirthTesting/read/dipssender_postprocessmessage.txt', false, message);
    return;
    

, Mirth. JDK1.7, , Mirth SOAP. Server/.../WebServiceMessageDispatcher.Java 137 :

    dispatch.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, true);

( )

+3

All Articles