Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 将请求从CFX服务转发到外部端点_Web Services_Cxf_Single Page Application - Fatal编程技术网

Web services 将请求从CFX服务转发到外部端点

Web services 将请求从CFX服务转发到外部端点,web-services,cxf,single-page-application,Web Services,Cxf,Single Page Application,目前,我正在解决以下问题: 在特殊情况下,我需要将SOAP请求转发给外部服务(决策基于SOAP消息中提供的tenantId)。我为这个任务创建了一个拦截器,从消息请求中提取tenantId,获取分配(每个tenantId分配给它自己在不同服务器上运行的服务实例),如果没有分配,我需要像平常一样处理请求 目前我是以这种方式实现的:我在拦截器中创建HttpUrlConnection,并将请求转发到外部端点(如果存在分配),获取响应的outputStream,然后通过HttpServletRespon

目前,我正在解决以下问题:

在特殊情况下,我需要将SOAP请求转发给外部服务(决策基于SOAP消息中提供的
tenantId
)。我为这个任务创建了一个拦截器,从消息请求中提取
tenantId
,获取分配(每个
tenantId
分配给它自己在不同服务器上运行的服务实例),如果没有分配,我需要像平常一样处理请求

目前我是以这种方式实现的:我在拦截器中创建
HttpUrlConnection
,并将请求转发到外部端点(如果存在分配),获取响应的
outputStream
,然后通过
HttpServletResponse.getOutputStream
等发送响应

我还需要考虑使用各种服务的拦截器(在SOAP请求中必须提供<代码> TANANDID < /COD>)。 我还阅读了有关提供程序和分派对象的内容,但不确定这应该如何工作

有没有办法从传入消息中获取目标服务和端口(QNames)


我现在不能使用Camel(只允许使用CXF)。

也许您可以尝试以下方法:

/** Your interceptor */
public void handleMessage(SoapMessage msg) throws Fault {

    Exchange exchange = msg.getExchange();
    Endpoint ep = exchange.get(Endpoint.class);

    // Get the service name
    ServiceInfo si = ep.getEndpointInfo().getService();
    String serviceName = si.getName().getLocalPart();

    XMLStreamReader xr = msg.getContent(XMLStreamReader.class);
    if (xr != null) { // If we are not even able to parse the message in the SAAJInInterceptor (CXF internal interceptor) this can be null

        // You have the QName
        QName name = xr.getName();

        SOAPMessage msgSOAP = msg.getContent(SOAPMessage.class);

        // Read soap msg
        if (msgSOAP != null) {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

            msgSOAP.writeTo(byteArrayOutputStream);
            String encoding = (String) msg.get(Message.ENCODING);
            String xmlRequest = new String(byteArrayOutputStream.toByteArray(), encoding);
        }

        // Forward to external service with JAX-RS implementation
        Client client = ClientBuilder.newClient()
                .target("http://your-target")
                .path("/custom-path")
                .request()
                .post(Entity.entity(xmlRequest, MediaType.APPLICATION_XML));
    }
}
希望这有帮助