Hi Richard,

Can you tell me which version of CXF are you use?
I just went through the code in the trunk for the NPE, and found the code had been changed recently. Could you try the latest trunk's version for it? Because we did some bug fix in the ReflectionServiceFactoryBean.

If the bug still there, we can fill a JIRA for tracking it.

Cheers,
Willem.

Shaw, Richard A wrote:
I still can't get this to work. I'm suspect it may have something to do with me 
not having a package-info.java class in my classpath.

I Don't know that this does. I just noticed that the sample has one and I don't 
and the fact that it says something about bindings and schema which is what 
line 213 is looking for.

But when I add a package-info.java I get a exception trying to publish my rest 
interface -

INFO: Creating Service 
{http://channelstore.inform.atkinsglobal.com/}ChannelStoreRestServiceService 
from class com.atkinsglobal.inform.channelstore.ChannelStoreRestService
Exception in thread "main" java.lang.NullPointerException
        at 
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createBareMessage(ReflectionServiceFactoryBean.java:557)
        at 
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:234)
        at 
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:246)
        at 
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:134)
        at 
org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint(AbstractEndpointFactory.java:83)
        at 
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:84)
        at 
com.atkinsglobal.inform.channelstore.ChannelStoreImpl.init(ChannelStoreImpl.java:333)
        at 
com.atkinsglobal.inform.channelstore.ChannelStoreServer.main(ChannelStoreServer.java:35)

My package-info.java file contains the following -

@javax.xml.bind.annotation.XmlSchema(namespace = "http://channelstore.inform.atkinsglobal.com";, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.atkinsglobal.inform.channelstore;

Which matches the package name of my Service -

package com.atkinsglobal.inform.channelstore;

import javax.jws.WebParam;
import javax.jws.WebService;

import org.codehaus.jra.Get;
import org.codehaus.jra.HttpResource;

import com.atkinsglobal.inform.dataaccess.GetDataFault;
import com.atkinsglobal.inform.dataaccess.types.GetData;

@WebService
public interface ChannelStoreRestService
{
    @Get
    @HttpResource(location = "/rest/{xPathQuery}")
    GetData getDataXPath(@WebParam(name = "GetDataXPathQuery") 
GetDataXPathQuery query) throws GetDataFault;
}

Richard Shaw

¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤

Richard Shaw Technical Design Authority - Information Solutions Consultancy Intelligent Transport Systems Atkins Highways and Transportation Woodcote Grove, Ashley Road, Epsom, Surrey, KT18 5BW

Tel: +44 (0) 1372 756407 Fax: +44 (0) 1372 740055 Mob: 07740 817586 E-mail: [EMAIL PROTECTED]

www.atkinsglobal.com/its

-----Original Message-----
From: Dan Diephouse [mailto:[EMAIL PROTECTED] Sent: 21 June 2007 02:36
To: [email protected]
Subject: Re: REST & XPath

OK I spent some time digging into this - you may also want to see my post to 
Willem.

Your test case works for me. I have to ask though - are you sticking an xpath expression 
in the URL? If so, are you escaping it? If not, the additional "/"s in the URL 
are likely to confuse the URI parser inside CXF.
As I understand URI templates, "/" is a sacred character and you can't have an unescaped 
"/" inside data which you want mapped to your method parameter.

- Dan

On 6/20/07, Shaw, Richard A < [EMAIL PROTECTED]> wrote:
My service is as follows -


@WebService
public interface ChannelStoreRestService { @Get @HttpResource(location = "/rest/{xPathQuery}") GetData getData(@WebParam(name = "GetDataQuery") GetDataQuery query) throws GetDataFault; }

My bean is -

@XmlRootElement(name = "GetDataQuery") public class GetDataQuery { private String xPathQuery; public String getXPathQuery() {
  return xPathQuery;
}
public void setXPathQuery(String _xPathQuery) {
  xPathQuery = _xPathQuery;
}
}

My implementation looks like -

@WebService(endpointInterface = "
com.atkinsglobal.inform.channelstore.ChannelStoreRestService")
public class ChannelStoreRestImpl implements ChannelStoreRestService { public GetData getData(GetDataQuery query) throws GetDataFault

And I create the service as follows -

// Publish the rest interface
ChannelStoreRestImpl restImpl = new ChannelStoreRestImpl(this); JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean(); sf.setServiceClass(ChannelStoreRestService.class);
sf.setBindingId(HttpBindingFactory.HTTP_BINDING_ID);
sf.setAddress(channelStoreEndpointUrl + "/xml/"); sf.getServiceFactory().setInvoker(new BeanInvoker(restImpl)); sf.getServiceFactory().setWrapped(false);
sf.create();


What isn't clear is which names need to match e.g. does the {} bit of
"/rest/{xPathQuery}") need to match xPathQuery in the bean ?



BTW - I also get another error is I set my location to "/{xPathQuery}" - it says unexpected '/' at index 0.

Richard

________________________________

From: Dan Diephouse [mailto: [EMAIL PROTECTED]
Sent: Tue 19/06/2007 19:05
To: [email protected]
Subject: Re: REST & XPath



Can you paste what your annotated method and configuration code look like?
Its a bit hard to figure it out just based on the annotation. Thanks,
- Dan

On 6/19/07, Shaw, Richard A < [EMAIL PROTECTED]> wrote:
I can't get this to work. I get the error below.

I looked at the code and it seems to be something to do with XML schema.


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.merg
eParams
(URIParameterInInterceptor.java:129)
        at

org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor.hand
leMessage
(URIParameterInInterceptor.java:105)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
PhaseInterceptorChain.java:147)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage (
ChainInitiationObserver.java:63)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequ
est(
JettyHTTPDestination.java:253)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService (
JettyHTTPDestination.java:213)
at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
JettyHTTPHandler.java:54)
        at org.mortbay.jetty.handler.ContextHandler.handle (
ContextHandler.java:712)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(
ContextHandlerCollection.java:211)
        at org.mortbay.jetty.handler.HandlerWrapper.handle (
HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:285)
        at org.mortbay.jetty.HttpConnection.handleRequest(
HttpConnection.java:502)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(
HttpConnection.java:821)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java
:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java
:378)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(
SelectChannelEndPoint.java :368)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(
BoundedThreadPool.java:442)
19-Jun-2007 14:37:17 sun.reflect.NativeMethodAccessorImpl invoke0
SEVERE: EXCEPTION
java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(
AbstractList.java:449)
at java.util.AbstractList$ListItr.previous(AbstractList.java:463) at

org.apache.cxf.phase.PhaseInterceptorChain$PhaseInterceptorIterator.pr
evious
(PhaseInterceptorChain.java:438)
        at org.apache.cxf.phase.PhaseInterceptorChain.unwind(
PhaseInterceptorChain.java:231)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
PhaseInterceptorChain.java:161)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage (
ChainInitiationObserver.java:63)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequ
est(
JettyHTTPDestination.java:253)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService (
JettyHTTPDestination.java:213)
at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
JettyHTTPHandler.java:54)
        at org.mortbay.jetty.handler.ContextHandler.handle (
ContextHandler.java:712)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(
ContextHandlerCollection.java:211)
        at org.mortbay.jetty.handler.HandlerWrapper.handle (
HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:285)
        at org.mortbay.jetty.HttpConnection.handleRequest(
HttpConnection.java:502)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(
HttpConnection.java:821)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java
:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java
:378)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(
SelectChannelEndPoint.java :368)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(
BoundedThreadPool.java:442)


Richard Shaw

¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤

Richard Shaw
Technical Design Authority - Information Solutions Consultancy Intelligent Transport Systems

Atkins Highways and Transportation
Woodcote Grove, Ashley Road, Epsom, Surrey, KT18 5BW

Tel: +44 (0) 1372 756407
Fax: +44 (0) 1372 740055
Mob: 07740 817586
E-mail: [EMAIL PROTECTED]

www.atkinsglobal.com/its

-----Original Message-----
From: Freeman Fang [mailto:[EMAIL PROTECTED]
Sent: 19 June 2007 09:45
To: [email protected]
Subject: Re: REST & XPath

Hi Richard,

Yes, you can do it with rest binding.
First you need a service interface, some thing like @WebService public interface BookService {
    @Get
    @HttpResource(location = "/dataaccess/{query}")
    Book getQuery(@WebParam(name = "GetQuery")
                         GetQuery query) throws BookNotFoundFault; }

And then a service impl
@WebService(endpointInterface = "
org.apache.cxf.customer.book.BookService
")
public class BookServiceImpl implements BookService {
    public Book getQuery(GetQuery query) throws BookNotFoundFault {
            // you can get xpath from query and finish your
functionality
            String xpath = query.getQuery();
    }
}

And then the GetQuery bean which contain your xpath @XmlRootElement(name
=
"XPathQuery") public class GetQuery {
    private String query;
    public String getQuery() {
        return query;
    }
    public void setQuery(String query) {
        this.query = query;
    }
}
After publish your service by means of
        BookServiceImpl serviceObj = new BookServiceImpl();
        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
        sf.setServiceClass(BookService.class);
// Use the HTTP Binding which understands the Java Rest Annotations
        sf.setBindingId(HttpBindingFactory.HTTP_BINDING_ID);
        sf.setAddress("http://localhost:9080/xml/";);
        sf.getServiceFactory().setInvoker(new BeanInvoker(serviceObj));
        sf.getServiceFactory().setWrapped(false);
        sf.create();

Finally you can access your service in rest way http://localhost:9080/xml/dataaccess/yourxpathstring

Thanks very much
Freeman

Shaw, Richard A wrote:
I'm not sure if this is a rest interface or not but could somebody advise me on how to do the following -

My request should look like this -

http://localhost/dataaccess/xpath

And my response is XML

The xpath bit of the request is used to access my data so my function
(dataaccess) needs to be given the complete xpath string. Will the rest interface do this for me ?
I'm expecting to use annotation like @HttpResource(location =
"/dataaccess/{query}")

Richard Shaw

¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø¤º°`°º¤ø,¸¸,ø¤

Richard Shaw
Technical Design Authority - Information Solutions Consultancy Intelligent Transport Systems

Atkins Highways and Transportation Woodcote Grove, Ashley Road, Epsom, Surrey, KT18 5BW

Tel: +44 (0) 1372 756407
Fax: +44 (0) 1372 740055
Mob: 07740 817586
E-mail: [EMAIL PROTECTED]

www.atkinsglobal.com/its



This email and any attached files are confidential and copyright
protected. If you are not the addressee, any dissemination of this communication is strictly prohibited. Unless otherwise expressly agreed
in
writing, nothing stated in this communication shall be legally binding.
The ultimate parent company of the Atkins Group is WS Atkins
plc.  Registered in England No. 1885586.  Registered Office Woodcote
Grove,
Ashley Road, Epsom, Surrey KT18 5BW.
Consider the environment. Please don't print this e-mail unless you
really need to.
This message has been scanned for viruses by MailControl - (see
http://bluepages.wsatkins.co.uk/?6875772)


--
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