sockets - Transporte TCP en Proxy wso2 esb
wso2esb (1)
Deseo enviar una solicitud sobre el transporte TCP a un servicio proxy, cuando use este código para enviar mi soap xml
Socket clientSocket = new Socket("host", port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("soap xml instance");
clientSocket.close();
funciona bien y mi negocio continúa.
Pero cuando envío dos xml sin cerrar el socket de esta manera:
Socket clientSocket = new Socket("host", port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("soap xml instance");
outToServer.writeBytes("another soap instance");
clientSocket.close();
siempre arroja esta excepción:
TID: [0] [ESB] [2013-06-28 13: 36: 10,838] ERROR {org.apache.axis2.transport.tcp.TCPWorker} - Error al procesar la solicitud TCP a través del motor Axis2 {org.apache.axis2 .transport.tcp.TCPWorker} org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxParsingException: destino de instrucción de procesamiento ilegal ("xml"); xml (sin distinción entre mayúsculas y minúsculas) está reservado por las especificaciones. en [row, col {unknown-source}]: [2,5] en org.apache.axiom.om.impl.builder.StAXOMBuilder.next (StAXOMBuilder.java:296) en org.apache.axiom.om.impl .llom.OMDocumentImpl.buildNext (OMDocumentImpl.java:135) en org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling (OMNodeImpl.java:122) en org.apache.axiom.om.impl.llom.OMElementImpl .getNextOMSibling (OMElementImpl.java:343) en org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode (OMChildrenIterator.java:36) en org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext (OMAbstractIterator .java: 58) en org.jaxen.util.DescendantAxisIterator.hasNext (DescendantAxisIterator.java:101) en org.jaxen.expr.DefaultStep.evaluate (DefaultStep.java:152) en org.jaxen.expr.DefaultLocationPath.evaluate ( DefaultLocationPath.java:140) en org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate (DefaultAbsoluteLocationPath.java:113) en org.jaxen.expr.DefaultXPathExpr.asList (DefaultXPathExpr.java:102) en org.jaxen.BaseXPath.selectNodesForContext (BaseXPath .java: 6 74) en org.jaxen.BaseXPath.selectNodes (BaseXPath.java:213) en org.jaxen.BaseXPath.evaluate (BaseXPath.java:172) en org.apache.synapse.util.xpath.SynapseXPath.stringValueOf (SynapseXPath.java : 297) en org.apache.synapse.mediators.builtin.PropertyMediator.getResultValue (PropertyMediator.java:299) en org.apache.synapse.mediators.builtin.PropertyMediator.mediate (PropertyMediator.java:95) en org.apache. synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:71) en org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.java:114) en org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive ( ProxyServiceMessageReceiver.java:154) en org.apache.axis2.engine.AxisEngine.receive (AxisEngine.java:180) en org.apache.axis2.transport.tcp.TCPWorker.run (TCPWorker.java:68) en org.apache .axis2.transport.base.threads.NativeWorkerPool $ 1.run (NativeWorkerPool.java:172) en java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) en java.util.co ncurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) en java.lang.Thread.run (Thread.java:662) Causado por: com.ctc.wstx.exc.WstxParsingException: destino de instrucción de procesamiento ilegal ("xml" ); xml (sin distinción entre mayúsculas y minúsculas) está reservado por las especificaciones. en [fila, col {unknown-source}]: [2,5] en com.ctc.wstx.sr.StreamScanner.constructWfcException (StreamScanner.java:606) en com.ctc.wstx.sr.StreamScanner.throwParseError (StreamScanner) .java: 479) en com.ctc.wstx.sr.BasicStreamReader.readPIPrimary (BasicStreamReader.java:3903) en com.ctc.wstx.sr.BasicStreamReader.nextFromProlog (BasicStreamReader.java:2037) en com.ctc.wstx. sr.BasicStreamReader.closeContentTree (BasicStreamReader.java:2886) en com.ctc.wstx.sr.BasicStreamReader.nextFromTree (BasicStreamReader.java:2629) en com.ctc.wstx.sr.BasicStreamReader.next (BasicStreamReader.java:1062) en org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next (XMLStreamReaderWrapper.java:225) en org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next (DisallowDoctypeDeclStreamReaderWrapper.java:34) en org.apache .axiom.util.stax.wrapper.XMLStreamReaderWrapper.next (XMLStreamReaderWrapper.java:225) en org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext (StAXOMBuilder.java:681) en o rg.apache.axiom.om.impl.builder.StAXOMBuilder.next (StAXOMBuilder.java:214) ... 25 más
Utilicé agregar ''/ n'', "/ r / n" a mi mensaje, pero ninguno de ellos lo hizo funcionar.
También probé que utilizó el método que explotó en este enlace. Cómo enviar mensajes SOAP utilizando TCP Transport y funcionó bien.
Pero no podría usar ese tipo de API en mi proyecto. ¿Cómo puedo deshacerme de este problema?
Pude enviar mensajes TCP a ESB utilizando un cliente de ejemplo, pero debe asegurarse de enviar un elemento XML.
Primero asegúrese de haber habilitado el transporte reciver para tcp en axis2.xml (repository / conf / axis2 / axis2.xml)
<transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportListener" >
======================== Mi Servicio Proxy que recibe mensajes TCP ===========
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="TCPProxy"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log level="full"/>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<parameter name="transport.tcp.port">6789</parameter>
<parameter name="transport.tcp.contentType">application/xml</parameter>
<description/>
</proxy>
== Cliente que envía mensajes al servidor TCP ====
import java.io.*;
import java.net.*;
class TCPClient {
String host = "localhost";
int port = 6789;
Socket socket = null;
public static void main(String args[]) throws Exception{
String name ="Amani";
TCPClient client = new TCPClient();
String message = "<soapenv:Envelope xmlns:soapenv=/"http://schemas.xmlsoap.org/soap/envelope//" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/">/n" +
"<soapenv:Header/>/n" +
"<soapenv:Body>/n" +
" <p:greet xmlns:p=/"http://greet.service.amani.org/">/n" +
" <in>" + name + "</in>/n" +
" </p:greet>/n" +
"</soapenv:Body>/n" +
"</soapenv:Envelope>";
client.SendToServer("<test></test>");
client.close();
}
TCPClient(String _host, int _port) throws Exception{
host = _host;
port = _port;
socket = new Socket(host, port);
}
TCPClient() throws Exception{
socket = new Socket(host, port);
}
void SendToServer(String msg) throws Exception{
//create output stream attached to socket
PrintWriter outToServer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
//send msg to server
outToServer.print(msg + ''/n'');
outToServer.flush();
}
String RecieveFromServer() throws Exception{
//create input stream attached to socket
BufferedReader inFromServer = new BufferedReader(new InputStreamReader (socket.getInputStream()));
//read line from server
String res = inFromServer.readLine(); // if connection closes on server end, this throws java.net.SocketException
return res;
}
void close() throws IOException{
socket.close();
}
}