Package org.openengsb.itests.remoteclient

Source Code of org.openengsb.itests.remoteclient.SecureSampleConnector

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.openengsb.itests.remoteclient;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.jms.JMSException;

import org.openengsb.connector.usernamepassword.Password;
import org.openengsb.core.api.Connector;
import org.openengsb.core.api.model.BeanDescription;
import org.openengsb.core.api.model.ConnectorDescription;
import org.openengsb.core.api.remote.MethodCall;
import org.openengsb.core.api.remote.MethodCallMessage;
import org.openengsb.core.api.remote.MethodResult;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
* Setup to run this app:
*
* + Start OpenEngSB
*
* + install the jms-feature: features:install openengsb-ports-jms
*
* + copy example+external-connector-proxy+example-remote.connector to the openengsb/config-directory
*
* + copy openengsb/etc/keys/public.key.data to src/main/resources
*/
public final class SecureSampleConnector {

    private static final String CREATE_MESSAGE =
        ""
                + "{\n"
                + "  \"principal\" : \"admin\",\n"
                + "  \"credentials\" : {\n"
                + "    \"className\" : \"org.openengsb.connector.usernamepassword.Password\",\n"
                + "    \"data\" : {\n"
                + "      \"value\" : \"password\"\n"
                + "    },\n"
                + "    \"binaryData\" : {\n"
                + "    }\n"
                + "  },\n"
                + "  \"methodCall\" : {\n"
                + "    \"methodName\" : \"createWithId\",\n"
                + "    \"args\" : [ \"example-remote\", {\n"
                + "      \"domainType\" : \"example\",\n"
                + "      \"connectorType\" : \"external-connector-proxy\",\n"
                + "      \"attributes\" : {\n"
                + "        \"serviceId\" : \"example-remote\",\n"
                + "        \"portId\" : \"jms-json\",\n"
                + "        \"destination\" : \"tcp://127.0.0.1:%s?example-remote\"\n"
                + "      },\n"
                + "      \"properties\" : {\n"
                + "      }\n"
                + "    } ],\n"
                + "    \"metaData\" : {\n"
                + "      \"serviceId\" : \"connectorManager\"\n"
                + "    },\n"
                + "    \"classes\" : [ \"java.lang.String\", \"org.openengsb.core.api.model.ConnectorDescription\" ]\n"
                + "  },\n"
                + "  \"callId\" : \"1d075f48-53ee-427a-ae8a-8e9d5b6db229\",\n"
                + "  \"answer\" : false,\n"
                + "  \"destination\" : null,\n"
                + "  \"timestamp\" : 1336060640851\n"
                + "}\n";

    private static final String DELETE_MESSAGE = ""
            + "{"
            + "  \"methodCall\" : {"
            + "    \"methodName\" : \"delete\","
            + "    \"args\" : [ \"example-remote\" ],"
            + "    \"metaData\" : {"
            + "      \"serviceId\" : \"connectorManager\""
            + "    },"
            + "    \"classes\" : [ \"java.lang.String\" ]"
            + "  },"
            + "  \"callId\" : \"62259d96-bcae-4450-bded-850a7f06f2ac\","
            + "  \"answer\" : false,"
            + "  \"destination\" : null,"
            + "  \"timestamp\" : 1336060561647,"
            + "  \"principal\" : \"admin\","
            + "  \"credentials\" : {"
            + "    \"className\" : \"org.openengsb.connector.usernamepassword.Password\","
            + "    \"data\" : {"
            + "      \"value\" : \"password\""
            + "    },"
            + "    \"binaryData\" : {"
            + "    }"
            + "  }"
            + "}";

    private static final String REGISTER_MESSAGE =
        ""
                + "{\n"
                + "  \"callId\" : \"1d861024-9292-4de3-b2e3-7997e8074eda\",\n"
                + "  \"timestamp\" : 1340090182282,\n"
                + "  \"methodCall\" : {\n"
                + "    \"methodName\" : \"registerConnector\",\n"
                + "    \"args\" : [ \"example-remote\", \"jms-json\", \"tcp://127.0.0.1:%s?example-remote\" ],\n"
                + "    \"metaData\" : {\n"
                + "      \"serviceId\" : \"proxyConnectorRegistry\"\n"
                + "    },\n"
                + "    \"classes\" : [ \"java.lang.String\", \"java.lang.String\", \"java.lang.String\" ]\n"
                + "  },\n"
                + "  \"answer\" : false,\n"
                + "  \"destination\" : null,\n"
                + "  \"principal\" : \"admin\",\n"
                + "  \"credentials\" : {\n"
                + "    \"className\" : \"org.openengsb.connector.usernamepassword.Password\",\n"
                + "    \"data\" : {\n"
                + "      \"value\" : \"password\"\n"
                + "    },\n"
                + "    \"binaryData\" : {\n"
                + "    }\n"
                + "  }\n"
                + "}\n"
                + "\n";

    public SecureSampleConnector(String openwirePort) {
        this.openwirePort = openwirePort;
    }
   
    private JmsConfig jmsConfig;
    private final String openwirePort;

    private RemoteRequestHandler requestHandler;

    public void start(Connector connectorImpl, ConnectorDescription connectorDescription) throws Exception {
        jmsConfig = new JmsConfig(String.format("failover:(tcp://localhost:%s)?timeout=60000", openwirePort));
        jmsConfig.init();
        requestHandler = new RemoteRequestHandler(connectorImpl);
        jmsConfig.createConsumerForQueue("example-remote", new ConnectorMessageListener(jmsConfig, requestHandler));
        Map<String, String> attributes = connectorDescription.getAttributes();
        attributes.put("portId", "jms-json");
        attributes.put("destination", "tcp://127.0.0.1:%s?example-remote");
        attributes.put("serviceId", "example-remote");
        String createMessage = createCreateMessage(connectorDescription);
        jmsConfig.sendMessage("receive", String.format(createMessage, openwirePort));
        Thread.sleep(5000);
        jmsConfig.sendMessage("receive", String.format(REGISTER_MESSAGE, openwirePort));
    }

    public void stop() throws JMSException {
        jmsConfig.sendMessage("receive", DELETE_MESSAGE);
        jmsConfig.stop();
    }

    public Map<MethodCall, MethodResult> getInvocationHistory() {
        return requestHandler.getInvocationHistory();
    }

    public static String createCreateMessage(ConnectorDescription connectorDescription) throws IOException {
        String connectorId = "example-remote";
        MethodCall methodCall = new MethodCall("createWithId", new Object[]{ connectorId, connectorDescription });
        Map<String, String> metaData = new HashMap<String, String>();
        metaData.put("serviceId", "connectorManager");
        methodCall.setMetaData(metaData);
        MethodCallMessage methodCallRequest = new MethodCallMessage(methodCall, false);
        BeanDescription auth = BeanDescription.fromObject(new Password("password"));
        methodCallRequest.setPrincipal("admin");
        methodCallRequest.setCredentials(auth);

        ObjectMapper mapper = new ObjectMapper();
        return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(methodCallRequest);
    }

    public static void createDeleteMessage() throws IOException {
        String connectorId = "example-remote";
        MethodCall methodCall = new MethodCall("delete", new Object[]{ connectorId });
        Map<String, String> metaData = new HashMap<String, String>();
        metaData.put("serviceId", "connectorManager");
        methodCall.setMetaData(metaData);
        MethodCallMessage methodCallRequest = new MethodCallMessage(methodCall, false);
        BeanDescription auth = BeanDescription.fromObject(new Password("password"));
        methodCallRequest.setPrincipal("admin");
        methodCallRequest.setCredentials(auth);
        ObjectMapper mapper = new ObjectMapper();
        String writeValueAsString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(methodCallRequest);
        System.out.println(writeValueAsString);
    }

    public static void createRegisterMessage() throws IOException {
        MethodCall methodCall = new MethodCall("registerConnector", new String[]{ "example-remote", "jms-json",
            "tcp://127.0.0.1:%s?example-remote" });
        Map<String, String> metaData = new HashMap<String, String>();
        metaData.put("serviceId", "connectorManager");
        methodCall.setMetaData(metaData);
        MethodCallMessage methodCallRequest = new MethodCallMessage(methodCall, false);
        BeanDescription auth = BeanDescription.fromObject(new Password("password"));
        methodCallRequest.setPrincipal("admin");
        methodCallRequest.setCredentials(auth);

        ObjectMapper mapper = new ObjectMapper();
        String writeValueAsString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(methodCallRequest);
        System.out.println(writeValueAsString);
    }

    public static void main(String[] args) throws IOException {
        createRegisterMessage();
    }
}
TOP

Related Classes of org.openengsb.itests.remoteclient.SecureSampleConnector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.