Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Java 嵌入Jetty时如何将AxisConfiguration传递给AxisServlet_Java_Ssl_Axis2_Embedded Jetty_Mutual Authentication - Fatal编程技术网

Java 嵌入Jetty时如何将AxisConfiguration传递给AxisServlet

Java 嵌入Jetty时如何将AxisConfiguration传递给AxisServlet,java,ssl,axis2,embedded-jetty,mutual-authentication,Java,Ssl,Axis2,Embedded Jetty,Mutual Authentication,一些背景: ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext(); File serviceArchiveFile = new File("<path to my aar file which is loaded properly>"); AxisServiceGroup serviceGroup = DeploymentEngine.loadSe

一些背景:

ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext();

File serviceArchiveFile = new File("<path to my aar file which is loaded properly>");
AxisServiceGroup serviceGroup = DeploymentEngine.loadServiceGroup(serviceArchiveFile, context);

AxisConfiguration axiConfiguration = context.getAxisConfiguration();
axiConfiguration.addServiceGroup(serviceGroup);

AxisServlet axisServlet = new AxisServlet();

Server server = new Server(8080);
org.mortbay.jetty.servlet.Context root = new org.mortbay.jetty.servlet.Context(server,"/",org.mortbay.jetty.servlet.Context.SESSIONS);
ServletHolder holder=new ServletHolder(axisServlet);

// Trying to pass the Config context via the parameters map
Map parameters = new HashMap();
parameters.put(AxisServlet.CONFIGURATION_CONTEXT, context);
holder.setInitParameters(parameters);

root.addServlet(holder,"/services/*");

server.start();
我正在尝试对我们公开的一些Axis2服务使用SSL相互身份验证。问题是Axis2内置服务器不支持这一点。因此,我想使用嵌入式Jetty来实现这一点,并在其中部署AxisServlet

问题:

ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext();

File serviceArchiveFile = new File("<path to my aar file which is loaded properly>");
AxisServiceGroup serviceGroup = DeploymentEngine.loadServiceGroup(serviceArchiveFile, context);

AxisConfiguration axiConfiguration = context.getAxisConfiguration();
axiConfiguration.addServiceGroup(serviceGroup);

AxisServlet axisServlet = new AxisServlet();

Server server = new Server(8080);
org.mortbay.jetty.servlet.Context root = new org.mortbay.jetty.servlet.Context(server,"/",org.mortbay.jetty.servlet.Context.SESSIONS);
ServletHolder holder=new ServletHolder(axisServlet);

// Trying to pass the Config context via the parameters map
Map parameters = new HashMap();
parameters.put(AxisServlet.CONFIGURATION_CONTEXT, context);
holder.setInitParameters(parameters);

root.addServlet(holder,"/services/*");

server.start();
似乎没有办法将AxisConfiguration(包含所有可用服务的定义)直接传递给servlet

我是如何做到这一点的:

ConfigurationContext context = ConfigurationContextFactory.createDefaultConfigurationContext();

File serviceArchiveFile = new File("<path to my aar file which is loaded properly>");
AxisServiceGroup serviceGroup = DeploymentEngine.loadServiceGroup(serviceArchiveFile, context);

AxisConfiguration axiConfiguration = context.getAxisConfiguration();
axiConfiguration.addServiceGroup(serviceGroup);

AxisServlet axisServlet = new AxisServlet();

Server server = new Server(8080);
org.mortbay.jetty.servlet.Context root = new org.mortbay.jetty.servlet.Context(server,"/",org.mortbay.jetty.servlet.Context.SESSIONS);
ServletHolder holder=new ServletHolder(axisServlet);

// Trying to pass the Config context via the parameters map
Map parameters = new HashMap();
parameters.put(AxisServlet.CONFIGURATION_CONTEXT, context);
holder.setInitParameters(parameters);

root.addServlet(holder,"/services/*");

server.start();
根据Axis2源代码,发生这种情况是因为AxisServlet中从未设置配置上下文。所以现在的大问题是:

1)可以直接在AxisServlet中设置配置上下文吗?我没有找到这样做的方法


2)为什么Jetty不发送init参数,也不调用servlet上的init(ServletConfig)方法?我向调试器确认它从未被调用。

如果您想加载配置上下文,您可以尝试直接从文件系统加载配置上下文,如下所示

ConfigurationContext myConfigContext= createConfigurationContextFromFileSystem(“,“axis2.xml的绝对路径”)

更多详情:

我相信我已经回答了你的部分问题

另外,要将axis2配置加载到AxisServlet,请将下面的配置添加到web.xml中

<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</
servlet-class>
<init-param>
<param-name>axis2.xml.url</param-name>
<param-value>path to you axis2.xml</param-value>
<param-name>axis2.repository.url</param-name>
<param-value>path to your repo</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

AxisServlet
ApacheAxisServlet
org.apache.axis2.transport.http.AxisServlet
axis2.xml.url
指向axis2.xml的路径
axis2.repository.url
你的回购之路
1.

不要使用简单的jetty上下文,而应该使用WebAppContext。这允许您将axis2配置上下文添加到jetty上下文中。

像这样:

Server server = new Server(1111);
WebAppContext root = new WebAppContext();
root.setAttribute(AxisServlet.CONFIGURATION_CONTEXT, context);
AxisServlet s = new AxisServlet();
ServletHolder holder = new ServletHolder(s);
root.addServlet(holder, "/axis2/*");

我擅长ConfigurationContext加载,它工作得很好。问题是,一旦我有了它,我就无法在AxisServlet中设置它。在答案中添加了AxisServlet配置部分。有没有一种方法可以通过编程实现这一点?我不使用任何axis2.xml或web.xml。只是嵌入了Jetty和引导代码。我将尝试将这两个参数传递给Jetty ServletHolder,并让您知道它是如何运行的。