Я пишу веб-службу CXF/Maven с помощью Spring для внедрения зависимостей. Ниже приведен код моего веб-сервиса:
@Path("/myws")
public interface IMyWebService {
@POST
@Path("/someAction")
@Consumes("application/json")
@Produces("application/json")
MyResponse requestSomeAction(MyRequest requestObj);
}
@Service("myWebService")
public class MyWebService implements IMyWebService {
@Autowired
private IMyCoreService myCoreService;
public MyResponse requestSomeAction(MyRequest requestObj) {
// do some work
return myResponse;
}
}
И в моем applicationContext.xml....
<context:component-scan base-package="com.company.project" />
<bean id="myCore" class="com.company.project.module.MyCoreService" />
<jaxrs:server id="restContainer" address="/">
<jaxrs:serviceBeans>
<bean class="com.company.project.module.MyWebService" />
</jaxrs:serviceBeans>
<jaxrs:features>
<cxf:logging />
</jaxrs:features>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
</jaxrs:providers>
</jaxrs:server>
Я пометил все зависимости CXF с областью действия как предоставленную, чтобы использовать библиотеки CXF в папках JBoss. Мне пришлось скопировать следующие jar-файлы в папку default\lib JBoss, чтобы соответствовать необходимым зависимостям.
cxf-rt-frontend-jaxrs.jar
aopalliance.jar
spring core jars
org.springframework.orm-3.0.0.RELEASE.jar
org.springframework.jdbc-3.0.0.RELEASE.jar
org.springframework.beans-3.0.0.RELEASE.jar
org.springframework.context-3.0.0.RELEASE.jar
com.springsource.org.hibernate.ejb-3.4.0.jar
Мой сервер приложений — JBoss. Когда я развертываю войну и запускаю сервер, я получаю следующую ошибку:
Caused by: java.net.MalformedURLException: no protocol: /
at java.net.URL.<init>(URL.java:567) [:1.6.0_33]
at java.net.URL.<init>(URL.java:464) [:1.6.0_33]
at java.net.URL.<init>(URL.java:413) [:1.6.0_33]
at org.jboss.wsf.stack.cxf.addons.transports.httpserver.HttpServerDestination.<init>(HttpServerDestination.java:67) [:3.4.1.GA]
at org.jboss.wsf.stack.cxf.addons.transports.httpserver.HttpServerTransportFactory.createDestination(HttpServerTransportFactory.java:102) [:3.4.1.GA]
at org.jboss.wsf.stack.cxf.addons.transports.httpserver.HttpServerTransportFactory.getDestination(HttpServerTransportFactory.java:91) [:3.4.1.GA]
at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:92) [:2.3.1]
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:71) [:2.3.1]
at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:95) [:2.3.1]
Я думаю, что «/» — это адрес, указанный в определении службы, указанном в applicationContext.xml. Почему я получаю вышеуказанную ошибку и как ее решить? Ваша помощь высоко ценится.