Инъекция бобов в apache servicemix - PullRequest
       43

Инъекция бобов в apache servicemix

0 голосов
/ 10 декабря 2018

Я новичок в сфере услуг Apache и пытаюсь создать клиентский сокет, который должен подключаться к какому-либо серверу.Мой код Java выглядит так:

package nettyTutorial.nettyTutorial;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.BufferedReader;

public class Client {

    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        socket = new Socket(host.getHostName(), 1112);
        BufferedReader reader;

        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            // read next line
            line = reader.readLine();
        }
        reader.close();
        socket.close();
    }
}

И сервер выглядит так:

package nettyTutorial.nettyTutorial;
import java.io.IOException;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;

public class TCPServer {

    //netstat -ano | findstr :yourPortNumber
    //taskkill /PID typeyourPIDhere /F

    //static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 1112;

    public static void main(String args[]) throws IOException, ClassNotFoundException, InterruptedException{
        //create the socket server object
        server = new ServerSocket(port);

        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            System.out.println("Accepted client request");

            int numberMessages = 0;
            while(numberMessages < 11) {
                String string = "Hello World" + numberMessages + "\r\n";
                System.out.println("Sending " + string);
                socket.getOutputStream().write(string.getBytes(Charset.forName("UTF-8")));
                Thread.sleep(1000);
                numberMessages = numberMessages +1;               
            }
        }

Как можно себе представить, сервер ожидает подключения клиентского сокета и отправляет текст"Hello world" каждую секунду к клиентскому сокету.

ЗДЕСЬ МОЙ ВОПРОС: Как я могу создать это точное взаимодействие с клиентским сокетом в файле blueprint.xml apache servicemix?

ЧТО Я ИМЕЮСОВЕРШЕНО?

Я создал следующий код, который является почти копией вставки клиентского Java-кода:

package nettyTutorial.nettyTutorial;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class ClientBean implements Processor {
    public void process(Exchange exchange) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        socket = new Socket(host.getHostName(), 1112);
        BufferedReader reader;

        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            // read next line
            line = reader.readLine();
            exchange.getOut().setBody(line);
        }
        reader.close();
        socket.close();
    }
}

Кроме того, я создал этот файл blueprint.xml:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    <camelContext xmlns="http://camel.apache.org/schema/blueprint">

        <route id="routeNetty" >        
          <bean ref="client_bean" />
          <to uri="log:test"/> 
        </route>
    </camelContext>

    <bean id="client_bean" class="nettyTutorial.nettyTutorial.ClientBean">
    </bean>
</blueprint>

То, на что я надеялся, это произойдет:

При запуске сервера и последующем запуске консоли apache karaf клиентский сокет должен подключаться к серверному сокету, и соединение между ними должно быть установлено.

Что на самом деле происходит: консоль apache karaf выводит сообщение «Аутентификация прошла успешно - karaf», но сервер продолжает слушать, пока не подключится к клиентскому сокету.

Я думаю, что фундаментальное понимание того, как внедряются файлы чертежейбобы здесь отсутствуют.Если у кого-то есть советы / рекомендации о том, как это сделать, я был бы действительно счастлив: D.

PS: Я также поместил файл jar в папку deploy, используя maven с командой:

mvn clean install

И файл pom.xml выглядит так:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.shengwang.example</groupId>
<artifactId>spring-camel-netty3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-camel-netty</name>
<url>http://maven.apache.org</url>

<properties>
    <!-- Generic properties -->
    <java.version>1.7</java.version>

    <!-- Camel -->
    <camel.version>2.14.1</camel.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-netty</artifactId>
        <version>${camel.version}</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
</dependencies>


<build>
    <plugins>
        <!-- Use JDK 1.7 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <compilerArgument>-Xlint:all</compilerArgument>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
            </configuration>
        </plugin>

        <!-- Allows the routes to be run via 'mvn camel:run' -->
        <plugin>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-maven-plugin</artifactId>
            <version>${camel.version}</version>
        </plugin>

    </plugins>
</build>

...