刚学Web Service ,用的是apache-cxf-2.2.7。但是第一个简单的发布Service都没成功,暂时不集成spring,生成不了wsdl.xml 。web.xml<?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">
   
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>CXF Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>package com.pal.service.api;import javax.jws.WebService;@WebService
public interface SayHello {

public String hello();
  
}package com.pal.service.impl;
import javax.jws.WebService;
import com.pal.service.api.SayHello;
@WebService(endpointInterface="com.pal.service.api.SayHello",serviceName="SayHello")
public class SayHelloImpl implements SayHello {
public String hello() {
return "hello , Web Service !";
}
}
package com.pal.service.app;import javax.xml.ws.Endpoint;
import com.pal.service.impl.SayHelloImpl;public class WebApp {
   public static void main(String[] args) {
   System.out.println("Starting Server");
   SayHelloImpl implementor = new SayHelloImpl();
   String address = "http://localhost:8080/helloWorld";
   Endpoint.publish(address, implementor);
   }
}访问http://localhost:8080/helloWorld。Tomcate 报告404 !
这是最简单的发布服务的配置了,那里有问题呢???

解决方案 »

  1.   

    你用 main 方法运行的话,CXF 会启动内置的 jetty 服务器来提供 Web 服务,因此那个 web.xml 配了等于没配。如果你是用 main 方法启动的,实在没出看来有什么问题。一般用 main 启动的话,启动正常会在控制台中输出日志的,我不知道你看到日志了没有?
      

  2.   

    如果你需要在 tomcat 中运行的话,那么最后那个带有 main 方法的类就不要了。要把 CXF 扔到 tomcat 中去,需要依赖于 Spring。参考 CXF 文档:
    http://cxf.apache.org/docs/servlet-transport.html
      

  3.   

    哦,要用Tomcat就一定要依赖于Spring啊那如果我想用jetty服务器,怎样访问呢?
    下面是运行main方法,后台打印的信息:
    Starting Server
    2010-3-28 21:58:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh
    信息: Refreshing org.apache.cxf.bus.spring.BusApplicationContext@10f6d3: display name [org.apache.cxf.bus.spring.BusApplicationContext@10f6d3]; startup date [Sun Mar 28 21:58:51 CST 2010]; root of context hierarchy
    2010-3-28 21:58:52 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
    信息: Overriding bean definition for bean 'org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder': replacing [Generic bean: class [org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]] with [Generic bean: class [org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]]
    2010-3-28 21:58:52 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
    信息: Overriding bean definition for bean 'org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder': replacing [Generic bean: class [org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]] with [Generic bean: class [org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]]
    2010-3-28 21:58:52 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
    信息: Overriding bean definition for bean 'org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider': replacing [Generic bean: class [org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]] with [Generic bean: class [org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]]
    2010-3-28 21:58:52 org.springframework.beans.factory.support.DefaultListableBeanFactory registerBeanDefinition
    信息: Overriding bean definition for bean 'org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory': replacing [Generic bean: class [org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory]; scope=singleton; abstract=false; lazyInit=true; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]] with [Generic bean: class [org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory]; scope=singleton; abstract=false; lazyInit=true; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/H:/Java%20EE%20Project/CXFTest/WebRoot/WEB-INF/lib/cxf-2.2.7.jar!/META-INF/cxf/cxf-extension-http.fixml]]
    2010-3-28 21:58:52 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
    信息: Bean factory for application context [org.apache.cxf.bus.spring.BusApplicationContext@10f6d3]: org.springframework.beans.factory.support.DefaultListableBeanFactory@16c79d7
    2010-3-28 21:58:52 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16c79d7: defining beans [cxf,org.apache.cxf.bus.spring.BusApplicationListener,org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor,org.apache.cxf.bus.spring.Jsr250BeanPostProcessor,org.apache.cxf.bus.spring.BusExtensionPostProcessor,org.apache.cxf.resource.ResourceManager,org.apache.cxf.configuration.Configurer,org.apache.cxf.binding.BindingFactoryManager,org.apache.cxf.transport.DestinationFactoryManager,org.apache.cxf.transport.ConduitInitiatorManager,org.apache.cxf.wsdl.WSDLManager,org.apache.cxf.phase.PhaseManager,org.apache.cxf.workqueue.WorkQueueManager,org.apache.cxf.buslifecycle.BusLifeCycleManager,org.apache.cxf.endpoint.ServerRegistry,org.apache.cxf.endpoint.ServerLifeCycleManager,org.apache.cxf.endpoint.ClientLifeCycleManager,org.apache.cxf.transports.http.QueryHandlerRegistry,org.apache.cxf.endpoint.EndpointResolverRegistry,org.apache.cxf.headers.HeaderManager,org.apache.cxf.catalog.OASISCatalogManager,org.apache.cxf.endpoint.ServiceContractResolverRegistry,org.apache.cxf.binding.corba.CorbaBindingFactory,org.apache.cxf.binding.corba.wsdl.WSDLExtensionRegister#0,org.apache.cxf.jaxws.context.WebServiceContextResourceResolver,org.apache.cxf.jaxws.context.WebServiceContextImpl,org.apache.cxf.binding.soap.SoapBindingFactory,org.apache.cxf.binding.soap.SoapTransportFactory,org.apache.cxf.binding.soap.customEditorConfigurer,org.apache.cxf.binding.xml.XMLBindingFactory,org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder,org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider,org.apache.cxf.ws.addressing.policy.UsingAddressingAssertionBuilder,org.apache.cxf.javascript.JavascriptQueryHandlerRegistry,org.apache.cxf.transport.local.LocalTransportFactory,org.apache.cxf.transport.http.policy.HTTPClientAssertionBuilder,org.apache.cxf.transport.http.policy.HTTPServerAssertionBuilder,org.apache.cxf.transport.http.policy.NoOpPolicyInterceptorProvider,org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory,org.apache.cxf.management.InstrumentationManager,org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory,org.apache.cxf.transport.jms.JMSTransportFactory,org.apache.cxf.binding.object.ObjectBindingFactory,org.apache.cxf.binding.http.HttpBindingFactory,org.apache.cxf.jaxrs.JAXRSBindingFactory,org.apache.cxf.ws.security.policy.WSSecurityPolicyLoader,org.apache.cxf.ws.policy.AssertionBuilderRegistry,org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistry,org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilderRegistry,org.apache.cxf.ws.policy.attachment.external.EndpointReferenceDomainExpressionBuilder,org.apache.cxf.ws.policy.PolicyBuilder,org.apache.cxf.ws.policy.PolicyEngine,org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider,org.apache.cxf.ws.policy.attachment.ServiceModelPolicyProvider,org.apache.cxf.ws.policy.mtom.MTOMAssertionBuilder,org.apache.cxf.ws.policy.mtom.MTOMPolicyInterceptorProvider,org.apache.cxf.ws.rm.RMManager,org.apache.cxf.ws.rm.policy.RMPolicyInterceptorProvider,org.apache.cxf.ws.rm.RMAssertionBuilder]; root of factory hierarchy
    2010-3-28 21:58:53 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
    信息: Creating Service {http://impl.service.pal.com/}SayHello from class com.pal.service.api.SayHello
    2010-3-28 21:58:53 org.apache.cxf.endpoint.ServerImpl initDestination
    信息: Setting the server's publish address to be http://localhost:8080/helloWorld
    2010-3-28 21:58:53 org.mortbay.log.Slf4jLog info
    信息: Logging to org.slf4j.impl.JDK14LoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
    2010-3-28 21:58:53 org.mortbay.log.Slf4jLog info
    信息: jetty-6.1.21
    2010-3-28 21:58:53 org.mortbay.log.Slf4jLog info
    信息: Started SelectChannelConnector@localhost:8080
      

  4.   


    我的MyEclipse中还没配置jetty服务器呢,看来还是用spring来配置,我试试看...
      

  5.   

    嗯,Spring配置的运行成功了!
      

  6.   

    我的MyEclipse中还没配置jetty服务器呢,看来还是用spring来配置,我试试看...
    哎,你还是没看懂我在说什么!如果你用你最后那个 main 运行的话,CXF 会使用其内置的 jetty 服务器