camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Willem Jiang (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (CAMEL-532) If serviceClass always required for CXF component, throw specific exception instead of NPE
Date Tue, 12 Aug 2008 09:08:52 GMT

     [ https://issues.apache.org/activemq/browse/CAMEL-532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Willem Jiang resolved CAMEL-532.
--------------------------------

    Resolution: Fixed

 http://svn.apache.org/viewvc?rev=685098&view=rev

> If serviceClass always required for CXF component, throw specific exception instead of
NPE
> ------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-532
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-532
>             Project: Apache Camel
>          Issue Type: Improvement
>            Reporter: Glen Mazza
>            Assignee: Willem Jiang
>            Priority: Minor
>             Fix For: 1.5.0
>
>
> The Camel-CXF documentation[1] says the "serviceClass" option is not required when you
are using CXF as a consumer (SOAP client).  (Slightly differently, FUSE's documentation[2]
is saying that the "serviceClass" is not required if you provide the wsdlURL, the portName,
and the serviceName.) I believe the following CXF_URI should work then even if I exclude the
serviceClass:
>    private static final String JAXWS_SERVER_ADDRESS = "http://localhost:8080/doubleit/services/doubleit";
>    private static final String CXF_URI = "cxf://" + JAXWS_SERVER_ADDRESS
>      + "?wsdlURL=http://localhost:8080/doubleit/services/doubleit?wsdl"
>      + "&serviceClass=com.mycompany.webservice.service.DoubleItPortTypeImpl"
>      + "&portName={http://www.example.org/DoubleIt}DoubleItPort"
>      + "&serviceName={http://www.example.org/DoubleIt}DoubleItService";
> ...
>       context.addRoutes(new RouteBuilder() {
>          public void configure() {
>             from("test-jms:queue:test.queue").process(new Processor() {
>                public void process(Exchange e) {
>                    System.out.println("This was called - Body: " + e.getIn().getBody(String.class));
>                    e.getIn().setHeader(CxfConstants.OPERATION_NAME,"DoubleIt");
>                    final List<String> params = new ArrayList<String>();
>                    params.add(e.getIn().getBody(String.class));
>                    e.getOut().setBody(params);
>                  }
>            }).to(CXF_URI).to("file://testfile").process(new Processor() {
>               public void process(Exchange e) {
>                  System.out.println("In process"); //  + e.getIn().getBody(String.class));
>                  List<String> abc = e.getIn().getBody(ArrayList.class);
>                  System.out.println("This was called - in File list: " + abc.get(0));
>                 }
>                });
>            }
>       });     
> ...
> But the problem is that the serviceClass seems to be always required, even if I supply
the wsdlURL, portName, and serviceName as I did here.  When I remove the serviceClass from
the code above, I get a NPE in the CXF code in both of these scenarios:
> 1.)  If I keep the wsdlURL, portName, and serviceName in the string above:
> java.lang.NullPointerException
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeWSDLOperations(ReflectionServiceFactoryBean.java:447)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:274)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:360)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:156)
>         at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:74)
>         at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
>         at org.apache.camel.component.cxf.CxfProducer.createClientFormClientFactoryBean(CxfProducer.java:165)
>         at org.apache.camel.component.cxf.CxfProducer.<init>(CxfProducer.java:66)
> 2.)  If I just keep the wsdlURL, and remove portName and serviceName also:
> java.lang.NullPointerException
>         at org.apache.cxf.service.factory.DefaultServiceConfiguration.getServiceNamespace(DefaultServiceConfiguration.java:168)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.getServiceNamespace(ReflectionServiceFactoryBean.java:1383)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.getServiceQName(ReflectionServiceFactoryBean.java:1338)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:268)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:360)
>         at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:156)
>         at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:74)
>         at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
>         at org.apache.camel.component.cxf.CxfProducer.createClientFormClientFactoryBean(CxfProducer.java:165)
>         at org.apache.camel.component.cxf.CxfProducer.<init>(CxfProducer.java:66)
> ...
> If I'm correct, that serviceClass is required no matter what, I think we need to update
our Camel documentation to clarify that.  Also, to modify CxfProducer to throw a clear exception
("serviceClass is required") if the serviceClass is missing, instead of the user just getting
the NPE somewhere deep in the CXF code.
> Glen
> [1] http://activemq.apache.org/camel/cxf.html
> [2] http://open.iona.com/docs/router/1.3/deploy_guide/FMRC.CXFComp.html

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message