2014-12-03 4 views
3

Мы обновляем движок webservice в нашем приложении от AXIS1.1 до CXF3.0.2. У меня есть несколько проблем с публикацией веб-сервисов в наших приложениях.Публикация веб-сервиса NonSpring с CXF

Из того, что я понимаю, существует подход SPRING к издательским сервисам в CXF, и существует неэлементный подход. Мое предпочтение заключается в использовании неэлементного подхода, поскольку наше приложение построено на основе STRUTS, и я не хочу привлекать SPRING в качестве части этого процесса обновления. Я открыт для выбора подхода SPRING к публикации веб-сервиса CXF, если у меня нет других параметров.

Вот мой не-весенний подход к публикации веб-сервиса:

У меня есть сервлет, который расширяет org.apache.cxf.transport.servlet.CXFNonSpringServlet и переопределяет метод loadBus (ServletConfig) (только фрагмент кода из метод loadBus ниже). Этот сервлет настраивается в web.xml, чтобы получить все запросы, исходящие с шаблоном URL/услуги/*

@Override 
public void loadBus(ServletConfig servletConfig) 
{ 
    super.loadBus(servletConfig); 
    Bus bus = getBus(); 
    BusFactory.setDefaultBus(bus); 
    Endpoint ep = Endpoint.create(new myWebService()); 
    ep.publish("/myService"); 
} 

Класс Endpoint в приведенном выше фрагменте кода является javax.xml.ws.Endpoint. Я ожидаю, что я увижу опубликованные службы с URL-адресом http://www.myhost.com/contextRoot/services/. Но я все, что я вижу с URL является «Никакие услуги не были найдены» - Ясно, что говорит публикации не удалось .. стек исключений трассировки на консоли сервера выглядит следующим образом:

java.lang.IllegalArgumentException: Невозможно создать URL для этот адрес /MYSERVICE на com.sun.xml.ws.transport.http.server.EndpointImpl.publish (EndpointImpl.java:237) в com.chase.ccs.servlet.CCSCXFNonSpringServlet.loadBus (CCSCXFNonSpringServlet.java:37) на org.apache.cxf.transport.servlet.CXFNonSpringServlet.init (CXFNonSpringServlet.java:76) на com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java:329) в com.ibm .ws.webcontainer.servle t.ServletWrapperImpl.init (ServletWrapperImpl.java:168) на com.ibm.ws.webcontainer.servlet.ServletWrapper.load (ServletWrapper.java:1283) на com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:973) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3703) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:304) at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:953) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer.java:1655) at com.ibm.ws.webcontainer. channel.WCChannelLink.ready (WCChannelLink.java:195) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:452) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink.java:511) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest (HttpInboundLink.java: 305) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:276) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java: 214) at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:217) at com.ibm .io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java: 138) at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:775) at com.ibm. io.async.ResultHandler $ 2.run (ResultHandler.java:905) в com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1650)

Что я упускаю или куда делась Я ошибаюсь?

ответ

0

Я также столкнулся с такой же ситуацией. вы можете изменить свой метод loadBus следующим образом. это сработало для меня.

@Override 
public void loadBus(ServletConfig servletConfig){ 
super.loadBus(servletConfig); 
ServerFactoryBean factory = new ServerFactoryBean(); 
factory.setBus(bus); 
factory.setServiceClass(myWebService.class); 
factory.setAddress("/myService"); 
factory.create(); 
} 
+0

Я получаю эту ошибку при использовании вашего кода ** класс не найден для SoapBindingConfiguration ** – SRF

0

Я знаю, что этот ответ может немного запоздать, но я столкнулся с аналогичной проблемой (cxf 3.1.4). В моем случае cxf-rt-frontend-jaxws jar не был в моем пути к классам приложений. Добавление его решило мою проблему.

Смежные вопросы