LOL, know just what you mean.  ;-)

Actually, while I was tinkering with it here I figured that out too. I realized that my URL should have had clients (plural) in it instead of client (singular). After I corrected that, I started getting a NullPointerException:

INFO: URIParameterInterceptor handle message on path [/clients] with content-type [null] Jul 12, 2007 3:35:06 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
java.lang.NullPointerException
at org.apache.cxf.binding.http.IriDecoderHelper.buildDocument(IriDecoderHelper.java:213) at org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.mergeParams(URIParameterInInterceptor.java:129) at org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.handleMessage(URIParameterInInterceptor.java:105)


But wait ... there's more. I decided to drop kick my service for the moment and pull in your CustomerService example from apache-cxf-2.0-incubator/samples/restful_http_binding. After I got all of the configuration set up for that sample service, doing a get against this URL worked:

http://localhost:8080/iat-services/ws/customer/customers

Hmmm. Something screwy here. So, I started comparing my webservice to yours piece by piece and my NullPointerException went away when I added a targetNamespace to my @WebService tag in my ClientService interface:

@WebService(targetNamespace = "http://iat.jcol.com";)

Adding that made the NPE go away, and now it's working! Does this make any sense? Why would that fix it, I wonder, hmmmm. I've checked it a couple of times and adding/removing that namespace causes the NPE to disappear/reappear.

Hope this helps in your understanding. Let me know if there is any other info I can provide to you. Appreciate the help.
--
Jason


From: "Dan Diephouse" <[EMAIL PROTECTED]>
Reply-To: [email protected]
To: [email protected]
Subject: Re: Trouble with creating RESTful Service deployed to Jetty - need help!
Date: Thu, 12 Jul 2007 13:32:48 -0600

Wow, I think I'm losing it - I forgot how my code works. It turns out (as
the logs suggest) that the correct URL is:

http://localhost:8080/iat-services/ws/clients/10<http://localhost:8080/iat-services/ws/client/10>

(clientS not client)

Cheers,
- Dan

On 7/12/07, Jason Mihalick <[EMAIL PROTECTED]> wrote:

I just realized that I missed this in my output previously.  The Mapping
messages you mentioned are below.

[INFO] Starting jetty 6.1H.4-beta ...
2007-07-12 12:31:19.634::INFO:  jetty-6.1H.4-beta
2007-07-12 12:31:19.840::INFO:  No Transaction manager found - if your
webapp requires one, please configure one.
2007-07-12 12:31:19.968:/iat-services:INFO:  Initializing Spring root
WebApplicationContext
Jul 12, 2007 12:31:19 PM org.springframework.web.context.ContextLoader
initWebApplicationContext
INFO: Root WebApplicationContext: initialization started
Jul 12, 2007 12:31:19 PM
org.springframework.context.support.AbstractApplicationContext refresh
INFO: Refreshing
[EMAIL PROTECTED]:
display name [Root WebApplicationContext]; startup date [Thu Jul 12
12:31:19
EDT 2007]; root of context hierarchy
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource
[/WEB-INF/beans.xml]
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource
[META-INF/cxf/cxf.xml]
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource
[META-INF/cxf/cxf-extension-soap.xml]
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource
[META-INF/cxf/cxf-servlet.xml]
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource
[META-INF/cxf/cxf-extension-http-binding.xml]
Jul 12, 2007 12:31:20 PM
org.springframework.context.support.AbstractApplicationContext refresh
INFO: Bean factory for application context
[EMAIL PROTECTED]:

[EMAIL PROTECTED]
Jul 12, 2007 12:31:20 PM

org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker
postProcessAfterInitialization
INFO: Bean 'org.apache.cxf.bus.spring.Jsr250BeanPostProcessor' is not
eligible for getting processed by all BeanPostProcessors (for example: not
eligible for auto-proxying)
Jul 12, 2007 12:31:20 PM

org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker
postProcessAfterInitialization
INFO: Bean 'cxf' is not eligible for getting processed by all
BeanPostProcessors (for example: not eligible for auto-proxying)
Jul 12, 2007 12:31:20 PM

org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker
postProcessAfterInitialization
INFO: Bean 'org.apache.cxf.bus.spring.BusExtensionPostProcessor' is not
eligible for getting processed by all BeanPostProcessors (for example: not
eligible for auto-proxying)
Jul 12, 2007 12:31:20 PM
org.springframework.beans.factory.support.DefaultListableBeanFactory
preInstantiateSingletons
INFO: Pre-instantiating singletons in

[EMAIL PROTECTED]
:
defining beans
[cxf,org.apache.cxf.bus.spring.Jsr250BeanPostProcessor,
org.apache.cxf.bus.spring.BusExtensionPostProcessor,
org.apache.cxf.resource.ResourceManager,
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.binding.soap.SoapBindingFactory,
org.apache.cxf.binding.soap.SoapTransportFactory,
org.apache.cxf.binding.soap.customEditorCo
nfigurer,org.apache.cxf.transport.servlet.ServletTransportFactory,
org.apache.cxf.binding.http.HttpBindingFactory
,JaxWsServiceFactoryBean,restfulServer];
root of factory hierarchy
Jul 12, 2007 12:31:20 PM
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromClass
INFO: Creating Service
{http://services.iat.jcol.com/}ClientServiceImplService from class
com.jcol.iat.services.ClientServiceImpl
Jul 12, 2007 12:31:21 PM
org.apache.cxf.binding.http.strategy.ConventionStrategy map
INFO: Mapping method updateClient to resource /clients and verb PUT
Jul 12, 2007 12:31:21 PM
org.apache.cxf.binding.http.strategy.ConventionStrategy map
INFO: Mapping method getClient to resource /clients and verb GET
Jul 12, 2007 12:31:21 PM
org.apache.cxf.binding.http.strategy.ConventionStrategy map
INFO: Mapping method deleteClient to resource /clients and verb DELETE
Jul 12, 2007 12:31:21 PM
org.apache.cxf.binding.http.strategy.ConventionStrategy map
INFO: Mapping method addClient to resource /clients and verb POST
Jul 12, 2007 12:31:21 PM
org.apache.cxf.binding.http.strategy.ConventionStrategy map
INFO: Mapping method getClients to resource /clients and verb GET
Jul 12, 2007 12:31:21 PM org.springframework.web.context.ContextLoader
initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 1383 ms
Jul 12, 2007 12:31:21 PM
org.springframework.context.support.AbstractApplicationContext refresh
INFO: Refreshing [EMAIL PROTECTED]:
display name [EMAIL PROTECTED];
startup date [Thu Jul 12 12:31:21 EDT 2007]; parent:
[EMAIL PROTECTED]
Jul 12, 2007 12:31:21 PM org.apache.cxf.bus.spring.BusApplicationContext
getConfigResources
INFO: Could not find the configuration file cxf.xml on the classpath.
Jul 12, 2007 12:31:21 PM
org.springframework.context.support.AbstractApplicationContext refresh
INFO: Bean factory for application context
[EMAIL PROTECTED]:

[EMAIL PROTECTED]
Jul 12, 2007 12:31:21 PM
org.springframework.beans.factory.support.DefaultListableBeanFactory
preInstantiateSingletons
INFO: Pre-instantiating singletons in

[EMAIL PROTECTED]
:
defining beans []; parent:

[EMAIL PROTECTED]
2007-07-12 12:31:21.343::INFO:  Started [EMAIL PROTECTED]
:8080
[INFO] Started Jetty Server


>From: "Dan Diephouse" <[EMAIL PROTECTED]>
>Reply-To: [email protected]
>To: [email protected]
>Subject: Re: Trouble with creating RESTful Service deployed to Jetty -
need
>help!
>Date: Thu, 12 Jul 2007 10:56:08 -0600
>
>Hi Jason,
>
>Everything looks roughly correct. Can you paste the log output? You
should
>some output from this line of code:
>
>LOG.info("Mapping method " + name + " to resource " + resource + " and
verb
>" + verb);
>
>Which should help clarify whats going on...
>
>- Dan
>
>On 7/12/07, Jason Mihalick <[EMAIL PROTECTED]> wrote:
>>
>>Hello,
>>
>>For the life of me I can't seem to get a simple RESTful webservice to
work
>>when I deploy it to Jetty (I haven't tried any other containers).  I
>>assume
>>that I am correct in using the CFXServlet to handle requests and route
>>them
>>to the service implementation?  iat-services is the name of my webapp
>>context.
>>
>>When I try to do a GET on this URL (just using a web browser):
>>http://localhost:8080/iat-services/ws/
>>
>>I get this output: {http://services.iat.jcol.com/}ClientServiceImplPort
>>
>>That looks fine, I think.
>>
>>Now, when I try to invoke my "client" service, with this url:
>>http://localhost:8080/iat-services/ws/client/10
>>
>>I get this output: Invalid URL/Verb combination. Verb: GET Path: /10
>>
>>If I try: http://localhost:8080/iat-services/ws/client/client/10
>>
>>I get this output: Invalid URL/Verb combination. Verb: GET Path:
>>/client/10
>>
>>What am I doing wrong here?  My classes and config are below.  I can
post
>>a
>>stack trace if you think it will help.
>>
>>==================
>>Service interface:
>>==================
>>package com.jcol.iat.services;
>>
>>import java.util.Collection;
>>
>>import javax.jws.WebService;
>>
>>import org.codehaus.jra.Delete;
>>import org.codehaus.jra.Get;
>>import org.codehaus.jra.HttpResource;
>>import org.codehaus.jra.Post;
>>import org.codehaus.jra.Put;
>>
>>
>>@WebService
>>public interface ClientService {
>>
>>   public Collection<Client> getClients();
>>
>>   public Client getClient( long id );
>>   public void addClient( Client client );
>>
>>   public void updateClient( long id, Client client);
>>
>>   public void deleteClient( long id );
>>
>>}
>>
>>
>>=============
>>Service Impl:
>>=============
>>package com.jcol.iat.services;
>>
>>import java.util.ArrayList;
>>import java.util.Collection;
>>
>>import javax.jws.WebService;
>>
>>@WebService(endpointInterface = "com.jcol.iat.services.ClientService")
>>public class ClientServiceImpl implements ClientService {
>>
>>   public ClientServiceImpl() {
>>
>>   }
>>
>>   public Collection<Client> getClients() {
>>     System.out.println( "getClients invoked" );
>>     return new ArrayList<Client>();
>>     // FIXME
>>   }
>>
>>   public Client getClient( long id ) {
>>     System.out.println( "getClient invoked" );
>>     // FIXME
>>     return new Client();
>>   }
>>
>>   public void addClient( Client client ) {
>>     System.out.println( "addClient invoked" );
>>     //FIXME
>>   }
>>
>>   public void updateClient( long id, Client client) {
>>     System.out.println( "updateClient invoked" );
>>     //FIXME
>>   }
>>
>>   public void deleteClient( long id ) {
>>     System.out.println( "deleteClient invoked" );
>>     //FIXME
>>   }
>>
>>}
>>
>>=========
>>beans.xml
>>=========
>><beans xmlns="http://www.springframework.org/schema/beans";
>>              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>              xmlns:jaxws="http://cxf.apache.org/jaxws";
>>        xsi:schemaLocation="http://www.springframework.org/schema/beans
>>http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>>                            http://cxf.apache.org/jaxws
>>file:///Applications/Java/toolkits/apache-cxf/apache-
cxf-2.0-incubator-src
>>/rt/frontend/jaxws/src/main/resources/schemas/jaxws.xsd"
>> >
>><!-- Fix the jaxws schemaLocation above -->
>>
>><!--
>>
>>              xsi:schemaLocation="
>>http://www.springframework.org/schema/beans
>>http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>>                                  http://cxf.apache.org/jaxws
>>http://cxf.apache.org/schemas/jaxws.xsd";
>>
>>     -->
>>         <import resource="classpath:META-INF/cxf/cxf.xml" />
>> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml
"
>>/>
>>         <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>>         <import resource="classpath:META-INF/cxf/cxf-
>>extension-http-binding.xml" />
>>
>>   <bean id="JaxWsServiceFactoryBean"
>>class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
>>     <property name="wrapped" value="false"/>
>>   </bean>
>>
>>   <jaxws:endpoint id="restfulServer"
>>               implementor="com.jcol.iat.services.ClientServiceImpl"
>>               address="/client"
>>               bindingUri="http://apache.org/cxf/binding/http";>
>>      <jaxws:serviceFactory>
>>          <ref bean="JaxWsServiceFactoryBean"/>
>>      </jaxws:serviceFactory>
>>   </jaxws:endpoint>
>></beans>
>>
>>=======
>>web.xml
>>=======
>><!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>
>>         <context-param>
>>                 <param-name>contextConfigLocation</param-name>
>>                 <param-value>WEB-INF/beans.xml</param-value>
>>         </context-param>
>>
>>         <listener>
>>                 <listener-class>
>>
>>org.springframework.web.context.ContextLoaderListener
>>                 </listener-class>
>>         </listener>
>>
>>         <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>/ws/*</url-pattern>
>>         </servlet-mapping>
>></web-app>
>>
>>Thanks,
>>Jason
>>
>>
>>
>
>
>--
>Dan Diephouse
>Envoi Solutions
>http://envoisolutions.com | http://netzooid.com/blog





--
Dan Diephouse
Envoi Solutions
http://envoisolutions.com | http://netzooid.com/blog


Reply via email to