Sockets 代理wso2-esb中的TCP传输

Sockets 代理wso2-esb中的TCP传输,sockets,tcp,wso2,wso2esb,Sockets,Tcp,Wso2,Wso2esb,当使用此代码发送soap xml时,我希望通过TCP传输将请求发送到代理服务 Socket clientSocket = new Socket("host", port); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); outToServer.writeBytes("soap xml instance"); clientSocket.close(); 它运作良好,我

当使用此代码发送soap xml时,我希望通过TCP传输将请求发送到代理服务

Socket clientSocket = new Socket("host", port);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

outToServer.writeBytes("soap xml instance");

clientSocket.close();
它运作良好,我的生意还在继续

但当我在不关闭套接字的情况下发送两个xml时,如下所示:

Socket clientSocket = new Socket("host", port);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

outToServer.writeBytes("soap xml instance");

outToServer.writeBytes("another soap instance");

clientSocket.close();
它总是引发以下异常:

TID:[0][ESB][2013-06-28 13:36:10838]错误 {org.apache.axis2.transport.tcp.TCPWorker}-处理时出错 通过Axis2引擎的TCP请求 {org.apache.axis2.transport.tcp.TCPWorker} org.apache.axiom.om.OmeException: com.ctc.wstx.exc.WstxParsingException:非法处理指令 目标(“xml”);xml(不区分大小写)由规范保留。在 [行,列{未知源}]:[2,5] 位于org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 位于org.apache.axiom.om.impl.llom.OMDocumentImpl.buildNext(OMDocumentImpl.java:135) 位于org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:122) 位于org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:343) 位于org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenIterator.java:36) 在org.apache.axiom.om.impl.traverse.omabstracterator.hasNext(omabstracterator.java:58) 位于org.jaxen.util.Degenantaxisterator.hasNext(Degenantaxisterator.java:101) 位于org.jaxen.expr.DefaultStep.evaluate(DefaultStep.java:152) 在org.jaxen.expr.DefaultLocationPath.evaluate上(DefaultLocationPath.java:140) 在org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate上(DefaultAbsoluteLocationPath.java:113) 位于org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102) 位于org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:674) 位于org.jaxen.BaseXPath.selectNodes(BaseXPath.java:213) 位于org.jaxen.BaseXPath.evaluate(BaseXPath.java:172) 位于org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(SynapseXPath.java:297) 位于org.apache.synapse.mediators.builtin.PropertyMediator.getResultValue(PropertyMediator.java:299) 位于org.apache.synapse.mediators.builtin.PropertyMediator.mediate(PropertyMediator.java:95) 位于org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) 位于org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) 位于org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:154) 在org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)上 位于org.apache.axis2.transport.tcp.TCPWorker.run(TCPWorker.java:68) 位于org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在java.lang.Thread.run(Thread.java:662)处,由以下原因引起:com.ctc.wstx.exc.WstxParsingException:非法处理指令 目标(“xml”);xml(不区分大小写)由规范保留。在 [行,列{未知源}]:[2,5] 位于com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606) 位于com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479) 位于com.ctc.wstx.sr.BasicStreamReader.readPIPrimary(BasicStreamReader.java:3903) 位于com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2037) 位于com.ctc.wstx.sr.BasicStreamReader.closeContentTree(BasicStreamReader.java:2886) 位于com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2629) 位于com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1062) 位于org.apache.axiom.util.stax.wrapper.xmlStreamReaderRapper.next(xmlStreamReaderRapper.java:225) 位于org.apache.axiom.util.stax.dialogue.disallowOctypedeclStreamReaderRapper.next(disallowOctypedeclStreamReaderRapper.java:34) 位于org.apache.axiom.util.stax.wrapper.xmlStreamReaderRapper.next(xmlStreamReaderRapper.java:225) 位于org.apache.axiom.om.impl.builder.statxombuilder.parserNext(statxombuilder.java:681) 位于org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) ... 25多

我曾在邮件中添加“\n”、““\r\n”,但没有一个这样做

我还尝试了使用这个链接中解释的方法。而且效果很好


但是我不能在我的项目中使用这种api。如何解决此问题。

我可以使用示例客户端将TCP消息发送到ESB,但您必须确保发送XML元素

首先确保在axis2.xml(repository/conf/axis2/axis2.xml)中为tcp启用了传输接收器


========================================接收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>

6789
应用程序/xml
==向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();
    }
}
import java.io.*;
导入java.net。*;
类TCPClient{
String host=“localhost”;
int端口=6789;
套接字=空;
公共静态void main(字符串args[])引发异常{
String name=“Amani”;
TCPClient client=新的TCPClient();
字符串消息=“\n”+
“\n”+
“\n”+
“\n”+
“+name+”\n”+
“\n”+
“\n”+
"";
client.SendToServer(“”);
client.close();
}
TCPClient(字符串\u主机,int\u端口)引发异常{
主机=_主机;
端口=_端口;
套接字=新套接字(主机、端口);
}
TCPClient()引发异常{
套接字=新套接字(主机、端口);
}
void SendToServer(字符串msg)引发异常{
//创建附加的输出流
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();
    }
}