java Apache CXF 和 tomcat
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15126875/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Apache CXF and tomcat
提问by Furkkanali
I am fairly new to Apache CXF and tomcat. I am trying to build a simple web service and deploy it on tomcat. below is my web.xml However when I try to access the 'services' folder using my browser it says No services have been found. I tried creating java web service client but it is not able to locate the service either. What could be wrong in this?
我对 Apache CXF 和 tomcat 还很陌生。我正在尝试构建一个简单的 Web 服务并将其部署在 tomcat 上。下面是我的 web.xml 但是当我尝试使用浏览器访问“services”文件夹时,它显示未找到任何服务。我尝试创建 Java Web 服务客户端,但它也无法找到该服务。这可能有什么问题?
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Sample web service provider</display-name>
<listener>
<!-- For Metro, use this listener-class instead:
com.sun.xml.ws.transport.http.servlet.WSServletContextListener -->
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Remove below context-param element if using Metro -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:META-INF/cxf/cxf.xml
</param-value>
</context-param>
<servlet>
<servlet-name>WebServicePort</servlet-name>
<!-- For Metro, use this servlet-class instead:
com.sun.xml.ws.transport.http.servlet.WSServlet -->
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WebServicePort</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
回答by Paulius Matulionis
This means that you don't have any services exposed in your application. Your web.xml
seems to be correct but I've just missed one thing, your Spring configuration. Add your Spring config location in your web.xml
, for e.g.:
这意味着您的应用程序中没有公开任何服务。您web.xml
似乎是正确的,但我刚刚错过了一件事,您的 Spring 配置。在您的 中添加您的 Spring 配置位置web.xml
,例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
Also, you have to create a class which will implement your web service interface and expose it as the CXF endpoint in your Spring applicationContext.xml
configuration file. For e.g.:
此外,您必须创建一个类,该类将实现您的 Web 服务接口并将其公开为 SpringapplicationContext.xml
配置文件中的 CXF 端点。例如:
<bean id="candidateImpl" class="some.pckg.CandidateImpl"/>
<jaxws:endpoint id="candidateEndpoint"
implementor="#candidateImpl"
address="/Candidate"
/>
Your CandidateImpl
class should have @WebServiceannotation. For e.g.:
你的CandidateImpl
类应该有@WebService注释。例如:
@WebService(targetNamespace = "http://something.com/ws/candidate",
portName = "CandidateService",
serviceName = "Candidate",
endpointInterface = "some.pckg.types.CandidateService",
wsdlLocation = "WEB-INF/wsdl/CandidateService.wsdl")
public class CandidateImpl implements CandidateService {
//Implementation of all methods from CandidateService.
}
If you've done everything correctly you should see that there is one service available under:
如果您已正确完成所有操作,您应该会看到在以下位置提供了一项服务:
http(s)://whateverhost.com:<somePort>/SomeContextPath/services
And you should be able to get the WSDL file like this:
您应该能够像这样获得 WSDL 文件:
http(s)://whateverhost.com:<somePort>/SomeContextPath/services/Candidate?wsdl
See also:
也可以看看:
回答by ravana
You need to set the spring configuration file location to make this work. You can set it as follows.
您需要设置 spring 配置文件位置才能完成此工作。您可以进行如下设置。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
回答by Alfredo A.
You need to configure a servlet in your web.xml. Below an example.
您需要在 web.xml 中配置一个 servlet。下面举个例子。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<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/spring-ws-servlet.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>
</web-app>
Now you need to define a file named spring-ws-servlet.xml under WEB-INF folder. Below an example of the content of spring-ws-servlet.xml, which contains the actual configuration for your web service. This depends on your logic, of course:
现在您需要在 WEB-INF 文件夹下定义一个名为 spring-ws-servlet.xml 的文件。下面是 spring-ws-servlet.xml 内容的示例,其中包含 Web 服务的实际配置。这当然取决于你的逻辑:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<context:component-scan base-package="com.sample.service"/>
<!-- JAX-WS Service Endpoint -->
<bean id="personImpl" class="com.sample.service.impl.PersonServiceImpl"/>
<jaxws:endpoint id="personEndpoint"
implementor="#personImpl"
address="/person">
<jaxws:properties>
<entry key="schema-validation-enabled" value="true"/>
</jaxws:properties>
</jaxws:endpoint>
<!-- JAX-WS Service Endpoint End-->
</beans>
With this, you can access your web service under http://localhost:8080/services/person?wsdl
有了这个,您就可以在http://localhost:8080/services/person?wsdl下访问您的 Web 服务
This is taken from this post. It is a tutorial about creating a Cxf service with IntelliJ Idea and Spring
这是从这个帖子中提取的。这是一个关于使用 IntelliJ Idea 和 Spring 创建 Cxf 服务的教程