私はこのシナリオを持っています:
データ サービスからの情報と別のデータ サービスからの別の情報を使用しており、この 2 つの情報を一意の応答にマージしたいと考えています。
このテストでは、データ サービスを使用せず、SOAPUI でモック サービスを使用し、両方のモック サービスが個別に正常に動作します。
マージしたいデータ、例:
データ サービス 1 の応答:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:obt="http://informatizacion.uci.cu/servicios/assets/ObtenerPersonas">
<soap:Header/>
<soap:Body>
<obt:Personas>
<!--Zero or more repetitions:-->
<obt:Persona>
<obt:idExpediente>T123654</obt:idExpediente>
<obt:primerNombre>yanaka</obt:primerNombre>
<obt:primerApellido>perez</obt:primerApellido>
<obt:segundoApellido>perez</obt:segundoApellido>
<obt:sexo>F</obt:sexo>
<obt:ci>920125848</obt:ci>
<obt:provincia>ok</obt:provincia>
<obt:municipio>yes</obt:municipio>
<obt:area>facultad</obt:area>
<obt:esDocente>false</obt:esDocente>
</obt:Persona>
</obt:Personas>
</soap:Body>
</soap:Envelope>
データ サービス 2 の応答:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:preg="http://pregrado.uci.cu">
<soap:Header/>
<soap:Body>
<preg:Personas>
<!--Zero or more repetitions:-->
<preg:Persona>
<preg:idExpediente>11111</preg:idExpediente>
<preg:primerNombre>jorge</preg:primerNombre>
<preg:primerApellido>infante</preg:primerApellido>
<preg:segundoApellido>osorio</preg:segundoApellido>
<preg:sexo>M</preg:sexo>
<preg:ci>1221122112211221</preg:ci>
<preg:provincia>rdf</preg:provincia>
<preg:municipio>dsf</preg:municipio>
<preg:area>df</preg:area>
<preg:esDocente>true</preg:esDocente>
</preg:Persona>
<preg:Persona>
<preg:idExpediente>gero et</preg:idExpediente>
<preg:primerNombre>sonoras imperio</preg:primerNombre>
<preg:primerApellido>quae divum incedo</preg:primerApellido>
<preg:segundoApellido>verrantque per auras</preg:segundoApellido>
<preg:sexo>per auras</preg:sexo>
<preg:ci>circum claustra</preg:ci>
<preg:provincia>nimborum in</preg:provincia>
<preg:municipio>foedere certo</preg:municipio>
<preg:area>profundum quippe ferant</preg:area>
<preg:esDocente>false</preg:esDocente>
</preg:Persona>
</preg:Personas>
</soap:Body>
</soap:Envelope>
そこで、次のプロキシ サービスを構築します。
<proxy xmlns="http://ws.apache.org/ns/synapse" name="PersonaPoC"
transports="https,http" statistics="disable" trace="disable"
startOnLoad="true">
<target inSequence="conf:/PersonaPoC/obtener_estudiantes"/>
<publishWSDL key="conf:/wsdl/PersonaSimplev2.wsdl"/>
<description></description>
</proxy>
このシーケンスで:
名前:obtener_estudiantes.
<sequence xmlns="http://ws.apache.org/ns/synapse">
<payloadFactory>
<format>
<preg:ObtenerEstudiantesPoC xmlns:preg="http://pregrado.uci.cu"/>
</format>
</payloadFactory>
<send receive="conf:/PersonaPoC/guardar_Estudiantes">
<endpoint>
<address uri="http://destrono:8088/mockPregradoWSSOAP12Binding/"/>
</endpoint>
</send>
</sequence>
名前:guardar_Estudiantes。
<sequence xmlns="http://ws.apache.org/ns/synapse">
<enrich>
<source clone="false" type="body"/>
<target action="replace" type="property"
property="listado_estudiantes"/>
</enrich>
<payloadFactory>
<format>
<obt:ObtenerPersonasPoC
xmlns:obt="http://informatizacion.uci.cu/servicios/assets/ObtenerPersonas"/>
</format>
</payloadFactory>
<log level="full"/>
<send receive="conf:/PersonaPoC/unir_Personas">
<endpoint>
<address uri="http://destrono:8888/mockAssetsSOAP12Binding"/>
</endpoint>
</send>
</sequence>
この時点で、サービスを実行すると ESB に次のエラーが表示されます。
これは、2 番目のサービスである mockAssetsSOAP12Binding に送信されたメッセージのログです。この名前空間が要求に表示される理由がわかりません: xmlns:preg= http://pregrado.uci.cu は、payloadfactory メディエーターで使用していないためです。
[2013-04-10 20:17:17,303] INFO - LogMediator To:
http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: ,
MessageID: urn:uuid:26b0c552-d8e6-4285-8814-84c595dae544, Direction:
response, Envelope:
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:preg="http://pregrado.uci.cu">
<soap:Body>
<obt:ObtenerPersonasPoC
xmlns:obt="http://informatizacion.uci.cu/servicios/assets/ObtenerPersonas"/>
</soap:Body>
</soap:Envelope>
エラー:
[2013-04-10 19:49:30,472] ERROR - RelayUtils Error while building Passthrough stream
org.apache.axiom.soap.SOAPProcessingException: Transport level information does not match with SOAP Message namespace URI
at
org.apache.axis2.builder.BuilderUtil.validateSOAPVersion(BuilderUtil.java:77
4)
at
org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:58)
at
org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocumen
t(DeferredMessageBuilder.java:146)
at
org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUti
ls.java:150)
at
org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtil
s.java:91)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat
or.java:62)
at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.
java:114)
at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn
apseEnvironment.java:223)
at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseC
allbackReceiver.java:443)
at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbac
kReceiver.java:166)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at
org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:217
)
at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerP
ool.java:172)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
10)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
03)
at java.lang.Thread.run(Thread.java:722)
AS 5.1.0 でデータ サービスを使用したときに、次のエラーが表示されました: org.apache.axiom.soap.SOAPProcessingException: First Element must contain local name, Envelope , but found faultstring
TCPMon を配置すると、次のメッセージ交換が表示されます。
Incoming message:
POST /mockAssetsSOAP12Binding HTTP/1.1
Content-Encoding: gzip
Content-Type: application/soap+xml; charset=UTF-8
Server: Jetty(6.1.x)
Transfer-Encoding: chunked
Host: 127.0.0.1:8888
Connection: Keep-Alive
124
<?xml version='1.0' encoding='UTF-8'?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:preg="http://pregrado.uci.cu"><soap:Body>
<obt:ObtenerPersonasPoC
xmlns:obt="http://informatizacion.uci.cu/servicios/assets/ObtenerPersonas"/>
</soap:Body></soap:Envelope>
0
送信メッセージ:
HTTP/1.1 500 Internal Server Error
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
Server: Jetty(6.1.x)
1a0
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<soap:Fault>
<soap:Code>
<soap:Value>Server</soap:Value>
</soap:Code>
<soap:Reason>
<!--1 or more repetitions:-->
<soap:Text xml:lang="en">java.io.IOException: Decompression of response failed</soap:Text>
</soap:Reason>
</soap:Fault>
</soap:Body>
</soap:Envelope>
0
これが最後のシーケンスです。名前: unir_Personas.
<sequence xmlns="http://ws.apache.org/ns/synapse">
<enrich>
<source clone="false" type="body"/>
<target action=" sibling" type="property"
property="listado_estudiantes"/>
</enrich>
<send/>
</sequence>
何か案が?