You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by xiaotao183 <xi...@gmail.com> on 2010/09/19 14:22:43 UTC

Got NPE when invoking POJO producer

Hi, 

I was trying to use the @producer annotation in serivcemix to send a message
to an endpoint. 

Here is the code 

@WebService(endpointInterface =
"org.apache.servicemix.examples.cxf.HelloWorld") 
public class HelloWorldImpl implements HelloWorld 
{ 
    @EndpointInject(uri="direct:start") 
    protected ProducerTemplate template; 

    public String sayHi(String text) 
    { 
        produce(); 
        return "Hello " + text; 
    } 

    public void produce() 
    { 
        template.sendBody("hello world"); 
    } 
} 

and this is the beans.xml 


<?xml version="1.0" encoding="UTF-8"?> 
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor 
        license agreements. See the NOTICE file distributed with this work
for additional 
        information regarding copyright ownership. The ASF licenses this
file to 
        you under the Apache License, Version 2.0 (the "License"); you may
not use 
        this file except in compliance with the License. You may obtain a
copy of 
        the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
required 
        by applicable law or agreed to in writing, software distributed
under the 
        License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS 
        OF ANY KIND, either express or implied. See the License for the
specific 
        language governing permissions and limitations under the License.
--> 
<!-- START SNIPPET: beans --> 
<beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws" 
        xmlns:osgi="http://camel.apache.org/schema/osgi" 
        xsi:schemaLocation=" 
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/osgi
http://camel.apache.org/schema/osgi/camel-osgi.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-extension-http.xml" /> 
        <import
resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" /> 

        <jaxws:endpoint id="helloWorld" 
               
implementor="org.apache.servicemix.examples.cxf.HelloWorldImpl" 
                address="/HelloWorld" /> 
        
        <bean class="org.apache.servicemix.examples.cxf.HelloWorldImpl" /> 
        
        <osgi:camelContext xmlns="http://camel.apache.org/schema/spring"> 
                <route> 
                        <from uri="direct:start" /> 

                        <to uri="log:ExampleRouter" /> 
                </route> 
        </osgi:camelContext> 

</beans> 
<!-- END SNIPPET: beans --> 



I got NPE when invoking the producertemplate to send message at the this
line 'template.sendBody("hello world");' 

Looks like the producertemplate was not injected to the bean correctly. 

Thanks
-- 
View this message in context: http://camel.465427.n5.nabble.com/Got-NPE-when-invoking-POJO-producer-tp2845554p2845554.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Got NPE when invoking POJO producer

Posted by Willem Jiang <wi...@gmail.com>.
That's because your template isn't injected with a producerTemplate, as 
the impl instance is created by CXF not by Spring.

Can you change the spring configure like this ?


  <jaxws:endpoint id="helloWorld"
   implementor="#myImpl"
   address="/HelloWorld" />

  <bean id="myImpl" 
class="org.apache.servicemix.examples.cxf.HelloWorldImpl" />

...

Willem


On 9/20/10 8:19 AM, xiaotao183 wrote:
>
> Hi Claus,
>
> Webservice is not part of the route. What I want to achieve is when the
> webservice is invoked a message should be produced and sent to an endpoint
> (in this case direct:start is the endpoint).
>
> I tested my code using a web client and the NPE was thrown in the line of
> calling the template.sendBody("hello world").
>
>


Re: Got NPE when invoking POJO producer

Posted by xiaotao183 <xi...@gmail.com>.
Hi Claus,

Webservice is not part of the route. What I want to achieve is when the
webservice is invoked a message should be produced and sent to an endpoint
(in this case direct:start is the endpoint).

I tested my code using a web client and the NPE was thrown in the line of
calling the template.sendBody("hello world").


-- 
View this message in context: http://camel.465427.n5.nabble.com/Got-NPE-when-invoking-POJO-producer-tp2845554p2846079.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Got NPE when invoking POJO producer

Posted by Claus Ibsen <cl...@gmail.com>.
The route you post does not use the web service in any way? That only
routes to a log endpoint.

And is your issue anyhow related to CAMEL-3136?
https://issues.apache.org/activemq/browse/CAMEL-3136


On Sun, Sep 19, 2010 at 2:22 PM, xiaotao183 <xi...@gmail.com> wrote:
>
> Hi,
>
> I was trying to use the @producer annotation in serivcemix to send a message
> to an endpoint.
>
> Here is the code
>
> @WebService(endpointInterface =
> "org.apache.servicemix.examples.cxf.HelloWorld")
> public class HelloWorldImpl implements HelloWorld
> {
>    @EndpointInject(uri="direct:start")
>    protected ProducerTemplate template;
>
>    public String sayHi(String text)
>    {
>        produce();
>        return "Hello " + text;
>    }
>
>    public void produce()
>    {
>        template.sendBody("hello world");
>    }
> }
>
> and this is the beans.xml
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- Licensed to the Apache Software Foundation (ASF) under one or more
> contributor
>        license agreements. See the NOTICE file distributed with this work
> for additional
>        information regarding copyright ownership. The ASF licenses this
> file to
>        you under the Apache License, Version 2.0 (the "License"); you may
> not use
>        this file except in compliance with the License. You may obtain a
> copy of
>        the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
> required
>        by applicable law or agreed to in writing, software distributed
> under the
>        License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
> CONDITIONS
>        OF ANY KIND, either express or implied. See the License for the
> specific
>        language governing permissions and limitations under the License.
> -->
> <!-- START SNIPPET: beans -->
> <beans xmlns="http://www.springframework.org/schema/beans"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:jaxws="http://cxf.apache.org/jaxws"
>        xmlns:osgi="http://camel.apache.org/schema/osgi"
>        xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd
> http://camel.apache.org/schema/osgi
> http://camel.apache.org/schema/osgi/camel-osgi.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-extension-http.xml" />
>        <import
> resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" />
>
>        <jaxws:endpoint id="helloWorld"
>
> implementor="org.apache.servicemix.examples.cxf.HelloWorldImpl"
>                address="/HelloWorld" />
>
>        <bean class="org.apache.servicemix.examples.cxf.HelloWorldImpl" />
>
>        <osgi:camelContext xmlns="http://camel.apache.org/schema/spring">
>                <route>
>                        <from uri="direct:start" />
>
>                        <to uri="log:ExampleRouter" />
>                </route>
>        </osgi:camelContext>
>
> </beans>
> <!-- END SNIPPET: beans -->
>
>
>
> I got NPE when invoking the producertemplate to send message at the this
> line 'template.sendBody("hello world");'
>
> Looks like the producertemplate was not injected to the bean correctly.
>
> Thanks
> --
> View this message in context: http://camel.465427.n5.nabble.com/Got-NPE-when-invoking-POJO-producer-tp2845554p2845554.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus