Я разработал веб-сервис на основе SOAP, используя Apache CXF 3 и Spring 3 и развернутый на Tomee. У меня есть 2 xml (1. beans.xml (cxf service) 2. spring-servlt.xml). Я обращаюсь к некоторым компонентам слоя DAO в моем xx-сервисе xx. он не вводится. когда я анализировал класс CXFServlet. Метод loadBus получает контекст приложения из класса WebApplicationContextUtils.Весна фасоли Apache CXF не вводится
Работала нормально в Причале. но он не работает в Томеифе. если я загружаю cxf bean, используя ContextLoaderListener, веб-службы не были обнаружены. после этого я использовал конфигурацию. для причала я не использовал отдельный xml для cxf. Я слился CxF бобы в моем приложении боба, он был загружен диспетчером сервлета и работал хорошо
CXFServlet.java
protected void loadBus(ServletConfig sc) {
ApplicationContext wac = WebApplicationContextUtils.
getWebApplicationContext(sc.getServletContext());
private ApplicationContext createSpringContext(ApplicationContext ctx,
ServletConfig servletConfig,
String location) {
XmlWebApplicationContext ctx2 = new XmlWebApplicationContext();
createdContext = ctx2;
ctx2.setServletConfig(servletConfig);
Resource r = ctx2.getResource(location);
try {
InputStream in = r.getInputStream();
in.close();
} catch (IOException e) {
//ignore
r = ctx2.getResource("classpath:" + location);
try {
r.getInputStream().close();
} catch (IOException e2) {
//ignore
r = null;
}
}
try {
if (r != null) {
location = r.getURL().toExternalForm();
}
} catch (IOException e) {
//ignore
}
if (ctx != null) {
ctx2.setParent(ctx);
String names[] = ctx.getBeanNamesForType(Bus.class);
if (names == null || names.length == 0) {
ctx2.setConfigLocations(new String[] {"classpath:/META-INF/cxf/cxf.xml",
location});
} else {
ctx2.setConfigLocations(new String[] {location});
}
} else {
ctx2.setConfigLocations(new String[] {"classpath:/META-INF/cxf/cxf.xml",
location});
createdContext = ctx2;
}
ctx2.refresh();
return ctx2;
}
если (CTX! = NULL) { ctx2.setParent (CTX);
поскольку ctx (wac) является null cxf не может установить родительский контекст. Бин инъекции не работает. пожалуйста, сообщите мне, почему этот wac является нулевым.
web.xml
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/connector/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<init-param>
<param-name>config-location</param-name>
<param-value>/WEB-INF/beans.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
Я попробовал все большинство все варианты уже были представлены в форме. Нужно ли добавлять какие-либо параметры в Tomee или в мой код.
Вы добавляете ContextLoaderListener в web.xml – andy
, если я загружаю cxf bean с помощью ContextLoaderListener, веб-службы не были открыты. после этого я использовал конфигурацию. он отлично работал в Jetty. но он не работает в Томее. – Gnana