- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有几个 Web 服务(REST+SOAP)在基于 CXF 2.7.10 版的 Apache Camel 2.13.0 中运行,它们一直使用 SSL 和基本身份验证,运行良好。
由于 Camel 的版本升级到版本 2.14.0,现在内部使用 CXF 3.0.1,我们的服务现在停止工作 端口 x 的协议(protocol)不匹配:引擎的协议(protocol)是 http,url 协议(protocol)是 https
- 但是在版本更新期间未更改配置。
...
Caused by: java.io.IOException: Protocol mismatch for port 8081: engine's protocol is http, the url protocol is https
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:271)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:121)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:154)
... 48 more
因此我创建了一个 new eclipse project which simplifies things to its bare minimum (只是一个简单的 SOAP 服务,有两个端点,它们都使用 HTTP 或 HTTPS)。
可以看到Jetty服务器的配置here
实际的服务被配置为 bean,稍后在 Camel 的路由中使用这个 bean:
@Bean(name="endpoint1ServiceSSL")
public CxfSpringEndpoint endpoint1ServiceSSL() throws Exception
{
final CxfSpringEndpoint factoryBean = new CxfSpringEndpoint();
factoryBean.setServiceClass(EnhancedEndpoint1Endpoint.class);
factoryBean.setWsdlURL("classpath:/wsdl/test.wsdl");
factoryBean.setEndpointName(new QName(NAMESPACE, "Endpoint1ServicePort", PREFIX));
factoryBean.setServiceName(new QName(NAMESPACE, "Endpoint1_Service", PREFIX));
factoryBean.setAddress(env.getProperty("services.address.ssl")+"/endpoint1");
factoryBean.setDataFormat(DataFormat.POJO);
final Map<String, Object> properties = new HashMap<>();
properties.put("schema-validation-enabled", "true");
properties.put("allowStreaming", true);
factoryBean.setProperties(properties);
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
return factoryBean;
}
NAMESPACE
和 PREFIX
只是一些常量,对于这个例子来说并不重要。 bean 从属性文件中获取某些值,例如服务的基地址,该文件只包含如下值:
services.address = http://0.0.0.0:8080/
services.address.ssl = https://0.0.0.0:8081/
和其他 ssl keystore 相关的东西。请注意,CXF 将在其初始化过程中使用 jetty 配置 bean,因此为 HTTPS 调用的 URL 创建一个 SSL 安全连接 - 至少它在版本升级之前这样做了。
路由现在可以使用这个非常简单的路由访问服务:
public class Endpoint1Route extends RouteBuilder
{
@Override
public void configure() throws Exception
{
from("cxf:bean:endpoint1Service")
.to("log:endpoint1Service");
from("cxf:bean:endpoint1ServiceSSL")
.to("log:endpoint1ServiceSSL");
}
}
这适用于 CXF 2.7.10 和 Camel 2.13.0 - 但如上所述,升级后由于某种原因存在协议(protocol)不匹配(希望可以从我链接的 github 项目中看出;克隆项目后,您需要执行 generate-sources 然后启动 ServicesApp
作为 Java 独立应用程序)。
我还为版本升级创建了一个新分支,以简化两个版本之间的切换。
任何人都知道为什么在版本升级之前有效的 Jetty 配置现在返回此协议(protocol)不匹配错误?我是否遗漏了任何我尚未弄清楚的更新库?还是我一开始就配置错了?
@编辑:
经过进一步测试后,我现在确信 CXF 内部的一些 API 更改导致了问题,因为配置 SSL 安全 Jetty 服务器的 bean 不再在启动时执行,而在版本 2.7.10 中执行 bean。
这会将实际问题更改为“如何在 Apache CXF 3.0.1 中配置 SSL 安全 Jetty 服务器”
@编辑#2:
我设法获得了在 Camel 2.14.0/CXF 3.0.1 中运行的 SSL 安全 Jetty 服务器,但只能通过 XML configuration .由于我们更喜欢 Java 配置而不是 XML,我们仍在寻找一种在 CXF 3.0.1 中使用 SSL 配置 Jetty 的方法——不过,跳过 jettySSLEngineFactory Spring bean 对我来说似乎是一个进一步的 CXF 错误。
澄清一下,在 CXF 2.7.x 中,可以在 Java 中配置 Jetty 服务器以创建返回 JettyHTTPServerEngineFactory
实例的 Spring bean,如上面链接的 github 项目的主分支中所示。 CXF 在配置服务器实例时使用了这个 bean,因此设置了 SSL 安全 Jetty 服务器。但是,在 CXF 3.0.1 中不再调用此 bean - 只有 JettyDestinationFactory
我不知道如何设置 SSL 安全服务器。 XML 示例还预装了 in the docs没有提供有关如何使用目标工厂设置带有 SSL 的 Jetty 的线索。
由于文档中 XML 示例中的 engine-factory
实际上映射到 JettyHTTPServerEngineFactory
并且基于 XML 的 Jetty 配置工作正常,这似乎精确定位了一个 Spring bean给我 CXF 3.0.1 中的注入(inject)错误。
最佳答案
由于CXF跳过jetty配置bean的bean初始化导致协议(protocol)不匹配错误。然而,事实证明,通过 CXF 中的内部 Spring 版本更改扩展 Spring 配置类会导致某些问题。
在 CxfEndpointConfig
中删除 extends SoapSSLConfig
并使用 @Import(SoapSSLConfig.class)
注入(inject)此配置类时,bean 初始化,因此 Jetty服务器配置像以前一样执行。
以前的代码是:
@Configuration
@ImportResource({ "classpath:META-INF/cxf/cxf.xml" })
public class CxfEndpointConfig extends SoapSSLConfig
{
...
}
导致注入(inject)失败。用下面的代码替换上面的代码解决了这个问题。
@Configuration
@ImportResource({ "classpath:META-INF/cxf/cxf.xml" })
@Import(SoapSSLConfig.class)
public class CxfEndpointConfig
{
...
}
关于java - Camel 2.14.0/CXF 3.0.1 jetty 配置 : Protocol mismatch error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26508701/
我只是不喜欢 Logback 的 XML 或 Groovy 配置,而更喜欢用 Java 进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置)。 似乎对 Logback 进行 Java 配置的
我的 sphinx 配置是: ================================ config/sphinx.yml development: bin_path: "/usr/loc
我们计划在生产服务器中部署我们的系统。我有兴趣了解更多有关优化网站性能的信息。 Sitecore 有哪些优化建议? (缓存,网络配置中的其他设置) 我们可以在 IIS 中做哪些优化? 找不到关于这些主
我有一个 Django 应用程序,可以处理网站的两个(或更多)部分,例如网站的“admin”和“api”部分。我还为网站的其余部分提供了普通的 html 页面,其中不需要 Django。 例如,我希望
我刚刚开始研究Docker。我有一个 Node 应用程序,可以调整大小和图像,然后在完成后向 aws 发送 SQS 消息。我已成功创建应用程序的 docker 镜像,并从本地计算机复制它,但遇到了无法
如何配置 checkstyle(在 Ant nt Maven 中)任务?我尝试了一点,但没有正确收到报告。这是我的 Ant 脚本。
我正在使用 Quartz 和 Spring 框架重写一个遗留项目。原始配置是 XML 格式,现在我将其转换为 Java Config。 xml 配置使用 jobDetail 设置触发器 bean 的作
tl;rd: 使用主键对数据库进行分区 索引大小问题。 数据库大小每天增长约 1-3 GB 突袭设置。 您有使用 Hypertable 的经验吗? 长版: 我刚刚建立/购买了一个家庭服务器: 至强 E
在安装 gcp 应用程序后,我们尝试使用 GCP 的图形 api 配置 Azure Active Directory saml 配置。我们正在遵循相同的 AWS graph api saml 设置 U
我刚刚了解了 spring security 并想使用 java hibernate 配置连接到数据库,但我发现的示例或教程很少。我通过使用 xml 配置找到了更多。我在这里使用 Spring 4.0
我们最近切换到 Java 8 以使用 java.time API(LocalDate、LocalDateTime,...)。因此,我们将 Hibernate 依赖项更新到版本 4.3.10。我们编写了
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus实战》系列的第六篇,咱
我是 NGINX 的新手,我正在尝试对我们的 ERP 网络服务器进行负载平衡。我有 3 个网络服务器在由 websphere 提供支持的端口 80 上运行,这对我来说是一个黑盒子: * web01.e
我们想使用 gerrit 进行代码审查,但我们在 webview 中缺少一些设置。 是否可以禁止提交者审查/验证他们自己的 提交? 是否有可能两个审稿人给 +1 一个累积它 到+2,以便可以提交? 谢
配置根据运行模式应用于 AEM 实例。在多个运行模式和多个配置的情况下,AEM 如何确定要选择的配置文件?假设以下配置在 AEM 项目中可用, /apps /myproject - con
我正在使用 Neo4j 服务器。我遇到了负载相对较低的问题。但是,响应时间相当长。我认为为请求提供服务的线程数太少了。有没有办法调整为 HTTP 请求提供服务的线程池的大小。那可能吗? 最佳答案 线程
我在/etc/default/celeryd 中有以下配置 CELERYD_NODES = "worker1 worker2 worker3" CELERYD_CHDIR = "path to pro
Plone 在其页面中显示来 self 的母语(巴西葡萄牙语)的特殊字符。但是,当我使用我创建的 spt 页面时,它会显示转义序列,例如: Educa\xc3\xa7\xc3\xa3o 代替 Educ
我正在尝试开始使用 Emacs/Clojure。安装 emacs 扩展的正确方法是什么。我正在尝试安装以下插件: https://bitbucket.org/kotarak/vimclojure 我已
我有一个简单的 C 项目结构: proj/ src/ docs/ build/ tests/ lib/ 尝试编写合适的 CMake 文件。 到目前为止我的尝试:http://pas
我是一名优秀的程序员,十分优秀!