Преглед изворни кода

Merge branch 'master' of luofaqiang/esb into master

罗发强 пре 8 година
родитељ
комит
f05f6b0b53

+ 5 - 1
hos-arbiter/pom.xml

@ -3,7 +3,6 @@
         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.yihu.hos</groupId>
    <artifactId>hos-arbiter</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <packaging>jar</packaging>
@ -31,6 +30,11 @@
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>

+ 9 - 0
hos-arbiter/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -0,0 +1,9 @@
{
  "properties": [
    {
      "name": "arbiter.timer.period",
      "type": "java.lang.String",
      "description": "Description for arbiter.timer.period."
    }
  ]
}

+ 1 - 0
hos-arbiter/src/main/resources/application.yml

@ -1,5 +1,6 @@
server:
  port: 10135
spring:
  application:
    name: ArbiterServer

+ 5 - 1
hos-broker/pom.xml

@ -3,7 +3,6 @@
         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.yihu.hos</groupId>
    <artifactId>hos-broker</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <packaging>war</packaging>
@ -91,6 +90,11 @@
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

+ 0 - 32
hos-broker/src/main/java/com/yihu/hos/controllers/EndPointController.java

@ -1,32 +0,0 @@
package com.yihu.hos.controllers;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
/**
 * @created Airhead 2016/8/1.
 */
@RestController
@RequestMapping("/service")
@Deprecated //直接由Arbiter来提供相关接串口,这样可以避免循环依赖
public class EndPointController {
    @RequestMapping(value = "/", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "登记服务信息", produces = "application/json", notes = "登记服务信息,当服务启动时调用,及定期调用。")
    public void save(
            @ApiParam(name = "service", value = "服务信息", required = true)
            @RequestParam(value = "service") String service) {
    }
    @RequestMapping(value = "/", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "获取服务信息", produces = "application/json", notes = "获取服务信息")
    public String get(
            @ApiParam(name = "serviceName", value = "服务名称", required = true)
            @RequestParam(value = "serviceName") String serviceName) {
        return "";
    }
}

+ 9 - 7
hos-broker/src/main/java/com/yihu/hos/controllers/GatewayController.java

@ -7,23 +7,25 @@ import com.yihu.hos.models.GatewayResponseResult;
import com.yihu.hos.services.GatewayService;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Writer;
@Controller
@RestController
@RequestMapping("/esb")
public class GatewayController {
    @Resource(name = GatewayService.BEAN_ID)
    private GatewayService gatewayService;
    private final GatewayService gatewayService;
    @Autowired
    public GatewayController(GatewayService gatewayService) {
        this.gatewayService = gatewayService;
    }
    @ResponseBody
    @RequestMapping(value = "/gateway", method = RequestMethod.POST)
    public void transfer(HttpServletRequest request, HttpServletResponse response) throws Exception {
        request.setCharacterEncoding("UTF-8");

+ 6 - 4
hos-broker/src/main/java/com/yihu/hos/services/GatewayService.java

@ -16,14 +16,16 @@ import java.util.Iterator;
import java.util.Map;
/**
 * Created by chenweida on 2016/1/27.
 * @author chenweida on 2016/1/27.
 */
@Service("GatewayService")
@Service
public class GatewayService {
    public static final String BEAN_ID = "GatewayService";
    private final GatewayConfiguration gatewayConfiguration;
    @Autowired
    private GatewayConfiguration gatewayConfiguration;
    public GatewayService(GatewayConfiguration gatewayConfiguration) {
        this.gatewayConfiguration = gatewayConfiguration;
    }
    public String getResultData(GatewayRequestResult gatewayRequestResult) throws ESBException {

+ 19 - 0
hos-broker/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -0,0 +1,19 @@
{
  "properties": [
    {
      "name": "hos.arbiter.enable",
      "type": "java.lang.String",
      "description": "Description for hos.arbiter.enable."
    },
    {
      "name": "hos.arbiter.url",
      "type": "java.lang.String",
      "description": "Description for hos.arbiter.url."
    },
    {
      "name": "hos.timer.period",
      "type": "java.lang.String",
      "description": "Description for hos.timer.period."
    }
  ]
}

+ 7 - 14
hos-broker/src/main/resources/application.yml

@ -1,12 +1,10 @@
application:
  name: HosBrokerServer
spring:
  application:
    name: HosBrokerServer
server:
  contextPath:
  port: 8099
  contextPath:
  sessionTimeout:  300
local:
  server:
    port: 8099
security:
  basic:
    enabled: false
@ -16,10 +14,6 @@ camel:
  springboot:
    name: HosBrokerServer
# how often to trigger the timer, must less than 30s
timer:
  period: 10000
---
spring:
  profiles: dev
@ -128,12 +122,11 @@ spring:
  gateway:
    ip: localhost
    port: 8066
server:
  port: 0
hos:
  arbiter:
    enable: false
    enable: true
    url: http://172.19.103.89:10135
  timer:
      period: 10000
---
application:
  message: ESB Broker

+ 3 - 0
hos-camel/pom.xml

@ -8,6 +8,9 @@
    <artifactId>hos-camel</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>hos-camel</name>
    <description>IEP内置业务流程编排模块,本部分内容的维护主要是为了保证代码的完整性。后期如果使用编排工具后,这部分内容是不需要的。</description>
    <dependencies>
        <dependency>
            <groupId>net.sf.json-lib</groupId>

+ 54 - 0
hos-camel/src/main/java/com/yihu/hos/api/processor/ApiProcessor.java

@ -0,0 +1,54 @@
package com.yihu.hos.api.processor;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.http.common.HttpMessage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        // 因为很明确消息格式是http的,所以才使用这个类
        // 否则还是建议使用org.apache.camel.Message这个抽象接口
        HttpMessage message = (HttpMessage) exchange.getIn();
        InputStream bodyStream = (InputStream) message.getBody();
        String inputContext = this.analysisMessage(bodyStream);
        bodyStream.close();
        // 存入到exchange的out区域
        if (exchange.getPattern() == ExchangePattern.InOut) {
            Message outMessage = exchange.getOut();
            outMessage.setBody("hello," + inputContext);
        }
    }
    /**
     * 从stream中分析字符串内容
     *
     * @param bodyStream
     * @return
     */
    private String analysisMessage(InputStream bodyStream) throws IOException {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] contextBytes = new byte[4096];
        int realLen;
        while ((realLen = bodyStream.read(contextBytes, 0, 4096)) != -1) {
            outStream.write(contextBytes, 0, realLen);
        }
        // 返回从Stream中读取的字串
        try {
            return new String(outStream.toByteArray(), "UTF-8");
        } finally {
            outStream.close();
        }
    }
}

+ 16 - 0
hos-camel/src/main/java/com/yihu/hos/api/route/ApiRouteBulider.java

@ -0,0 +1,16 @@
package com.yihu.hos.api.route;
import com.yihu.hos.api.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9090/api/v1").routeId("api")
                .process(new ApiProcessor());
    }
}

+ 25 - 182
hos-rest/src/main/java/com/yihu/hos/rest/common/http/EHRHttpHelper.java

@ -3,41 +3,27 @@ package com.yihu.hos.rest.common.http;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.entity.GzipDecompressingEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import javax.net.ssl.SSLContext;
import java.io.*;
import java.io.File;
import java.util.Map;
import java.util.Properties;
import java.util.zip.GZIPInputStream;
//TODO:对于Basic认证内容,暂时未验证,可以使用http://user:password@host的方式尝试访问
public class EHRHttpHelper {
    public static String defaultHttpUrl;
    public static String clientId;
    public static String clientKey;
    private static String defaultPropertiesPath = "config/http.properties";
    private static SSLConnectionSocketFactory defaultSSL;
    private static String defaultHttpUser;
    private static String defaultHttpPassword;
    static {
        //默认配置
        try {
            final String defaultPropertiesPath = "config/http.properties";
            Resource resource = new ClassPathResource(defaultPropertiesPath);
            EncodedResource encRes = new EncodedResource(resource, "UTF-8");
            Properties props = PropertiesLoaderUtils.loadProperties(encRes);
@ -55,17 +41,11 @@ public class EHRHttpHelper {
                // sslKeystore = homeUrl + "tomcat.keystore";
                sslKeystore = "E://tomcat.keystore";
            }
            if (sslKeystore != null && sslKeystore.length() > 0 && sslPassword != null && sslPassword.length() > 0) {
                SSLContext sslContext = SSLContexts.custom()
                        .loadTrustMaterial(new File(sslKeystore), sslPassword.toCharArray(),
                                new TrustSelfSignedStrategy())
                        .build();
                defaultSSL = new SSLConnectionSocketFactory(
                        sslContext,
                        new String[]{"TLSv1"},
                        null,
                        SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            if (sslKeystore.length() > 0 && sslPassword != null && sslPassword.length() > 0) {
                HttpClientKit.addKeyStore(defaultHttpUrl, sslKeystore, sslPassword);
            }
        } catch (Exception e) {
            System.out.print(e.getMessage());
        }
@ -76,7 +56,7 @@ public class EHRHttpHelper {
     * Get方法
     ******************************************/
    public static HTTPResponse get(String url) {
        return get(url, null, null);
        return get(url, null);
    }
    public static HTTPResponse get(String url, Map<String, String> params) {
@ -84,28 +64,18 @@ public class EHRHttpHelper {
    }
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> header) {
        if (url.startsWith("https")) {
            return get(url, params, header, defaultSSL);
        } else {
            //默认http不走ssl和用户密码
            return get(url, params, header, null, null, null);
        }
        return get(url, params, header, false);
    }
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> header, Boolean isCheck) {
        if (isCheck) {
            return get(url, params, header, defaultSSL, defaultHttpUser, defaultHttpPassword);
            return get(url, params, header, defaultHttpUser, defaultHttpPassword);
        } else {
            return get(url, params, header, null, null, null);
            return get(url, params, header, null, null);
        }
    }
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl) {
        return get(url, params, header, ssl, defaultHttpUser, defaultHttpPassword);
    }
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl, String user, String password) {
    public static HTTPResponse get(String url, Map<String, String> params, Map<String, String> header, String user, String password) {
        return HttpClientKit.request("GET", url, params, header);
    }
@ -113,7 +83,7 @@ public class EHRHttpHelper {
     * Post方法
     ******************************************/
    public static HTTPResponse post(String url) {
        return post(url, null, null);
        return post(url, null);
    }
    public static HTTPResponse post(String url, Map<String, String> params) {
@ -121,27 +91,18 @@ public class EHRHttpHelper {
    }
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> header) {
        if (url.startsWith("https")) {
            return post(url, params, header, defaultSSL);
        } else {
            //默认http不走ssl和用户密码
            return post(url, params, header, null, null, null);
        }
        return post(url, params, header, false);
    }
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> header, Boolean isCheck) {
        if (isCheck) {
            return post(url, params, header, defaultSSL, defaultHttpUser, defaultHttpPassword);
            return post(url, params, header, defaultHttpUser, defaultHttpPassword);
        } else {
            return post(url, params, header, null, null, null);
            return post(url, params, header, null, null);
        }
    }
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl) {
        return post(url, params, header, ssl, defaultHttpUser, defaultHttpPassword);
    }
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl, String user, String password) {
    public static HTTPResponse post(String url, Map<String, String> params, Map<String, String> header, String user, String password) {
        return HttpClientKit.request("POST", url, params, header);
    }
@ -175,28 +136,18 @@ public class EHRHttpHelper {
    }
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> header) {
        if (url.startsWith("https")) {
            return put(url, params, header, defaultSSL);
        } else {
            //默认http不走ssl和用户密码
            return put(url, params, header, null, null, null);
        }
        return put(url, params, header, false);
    }
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> header, Boolean isCheck) {
        if (isCheck) {
            return put(url, params, header, defaultSSL, defaultHttpUser, defaultHttpPassword);
            return put(url, params, header, defaultHttpUser, defaultHttpPassword);
        } else {
            return put(url, params, header, null, null, null);
            return put(url, params, header, null, null);
        }
    }
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl) {
        return put(url, params, header, ssl, defaultHttpUser, defaultHttpPassword);
    }
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl, String user, String password) {
    public static HTTPResponse put(String url, Map<String, String> params, Map<String, String> header, String user, String password) {
        return HttpClientKit.request("PUT", url, params, header);
    }
@ -212,127 +163,19 @@ public class EHRHttpHelper {
    }
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> header) {
        if (url.startsWith("https")) {
            return delete(url, params, header, defaultSSL);
        } else {
            //默认http不走ssl和用户密码
            return delete(url, params, header, null, null, null);
        }
        return delete(url, params, header, false);
    }
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> header, Boolean isCheck) {
        if (isCheck) {
            return delete(url, params, header, defaultSSL, defaultHttpUser, defaultHttpPassword);
            return delete(url, params, header, defaultHttpUser, defaultHttpPassword);
        } else {
            return delete(url, params, header, null, null, null);
            return delete(url, params, header, null, null);
        }
    }
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl) {
        return delete(url, params, header, ssl, defaultHttpUser, defaultHttpPassword);
    }
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> header, SSLConnectionSocketFactory ssl, String user, String password) {
    public static HTTPResponse delete(String url, Map<String, String> params, Map<String, String> header, String user, String password) {
        return HttpClientKit.request("DELETE", url, params, header);
    }
    public static String getWebPage(String url) {
        String returnString = "";
        HTTPResponse re = new HTTPResponse(200, "");
        CloseableHttpResponse response = null;
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(defaultSSL)
                .build();
        //设置请求信息
        try {
            HttpGet httpGet = new HttpGet(url);
            response = httpclient.execute(httpGet);
            String line;
            // 读取输入流的数据,并显示
            HttpEntity httpEntity = response.getEntity();
            Header header = response.getEntity().getContentEncoding();
            if (httpEntity.getContentLength() < 2147483647L) {            //EntityUtils无法处理ContentLength超过2147483647L的Entity
                if (header != null && "gzip".equals(header.getValue())) {
                    returnString = EntityUtils.toString(new GzipDecompressingEntity(httpEntity));
                } else {
                    returnString = EntityUtils.toString(httpEntity);
                }
            } else {
                InputStream in = httpEntity.getContent();
                if (header != null && "gzip".equals(header.getValue())) {
                    returnString = unZip(in, ContentType.getOrDefault(httpEntity).getCharset().toString());
                } else {
                    returnString = readInStreamToString(in, ContentType.getOrDefault(httpEntity).getCharset().toString());
                }
                if (in != null) {
                    in.close();
                }
            }
        } catch (Exception e) {
            re = new HTTPResponse(201, e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(returnString);
        return returnString;
    }
    /**
     * 解压服务器返回的gzip流
     *
     * @param in      抓取返回的InputStream流
     * @param charSet 页面内容编码
     * @return 页面内容的String格式
     * @throws IOException
     */
    private static String unZip(InputStream in, String charSet) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        GZIPInputStream gis = null;
        try {
            gis = new GZIPInputStream(in);
            byte[] _byte = new byte[1024];
            int len = 0;
            while ((len = gis.read(_byte)) != -1) {
                baos.write(_byte, 0, len);
            }
            String unzipString = new String(baos.toByteArray(), charSet);
            return unzipString;
        } finally {
            if (gis != null) {
                gis.close();
            }
            if (baos != null) {
                baos.close();
            }
        }
    }
    /**
     * 读取InputStream流
     *
     * @param in InputStream流
     * @return 从流中读取的String
     * @throws IOException
     */
    private static String readInStreamToString(InputStream in, String charSet) throws IOException {
        StringBuilder str = new StringBuilder();
        String line;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, charSet));
        while ((line = bufferedReader.readLine()) != null) {
            str.append(line);
            str.append("\n");
        }
        if (bufferedReader != null) {
            bufferedReader.close();
        }
        return str.toString();
    }
}

+ 5 - 5
pom.xml

@ -27,11 +27,11 @@
    </properties>
    <dependencies>
        <!--<dependency>-->
        <!--<groupId>org.springframework.boot</groupId>-->
        <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
        <!--<scope>provided</scope>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>

+ 8 - 5
sdk/java/hos-client/src/main/java/com/yihu/hos/client/BrokerServer.java

@ -1,9 +1,6 @@
package com.yihu.hos.client;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.*;
import java.io.IOException;
import java.util.Arrays;
@ -76,7 +73,13 @@ class BrokerServer {
        ClientResponse result = new ClientResponse();
        try {
            OkHttpClient okHttpClient = new OkHttpClient();
            Request request = new Request.Builder().url(hostAddress + ":" + port + method).build();
            FormBody.Builder fromBodyBuilder = new FormBody.Builder();
            clientRequest.getArgs().forEach(fromBodyBuilder::add);
            RequestBody requestBody = fromBodyBuilder
                    .build();
            Request request = new Request.Builder().url(hostAddress + ":" + port + method)
                    .post(requestBody)
                    .build();
            Call call = okHttpClient.newCall(request);
            Response response = call.execute();
            if (!response.isSuccessful()) {

+ 1 - 4
sdk/java/hos-client/src/main/java/com/yihu/hos/client/BrokerServerClient.java

@ -2,10 +2,7 @@ package com.yihu.hos.client;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.*;
import java.io.IOException;
import java.util.HashMap;