On Sat, 15 Nov 2008 11:44:55 +0800
"Willem Jiang" <[EMAIL PROTECTED]> wrote:

> It is strang, which version of camel are you using ?

1.3

> Can you try to set the service class to be SalaryDeclarationPort ?

Didn't make any difference. Same exception occurs. After some debugging
it makes sense to me.

> There may be something wrong with the ReflectionServiceFactoryBean
> when it is looking up the SEI.
> Can you submit a small unit test to a Camel JIRA[1] ? we can dig the
> code for the real reason.
> 
> [1]http://issues.apache.org/activemq/browse/CAMEL

ATM very difficult to provide you a complete example. Will look that
I can bring up something if we don't get further here.

As I already mentioned above, I did some debugging in cxf.
What I found is the following:

When I set the wsdlLocation on the two cxf:cxfEndpoint 's, all
is working fine again. That's because the service is setup with
the wsdl definitions and independend from the service class.

If I don't specify the wsdlLocation (as it originally was) the following
code seems to be problematic in my case:

class JaxWsServiceConfiguration:
public Boolean isWebMethod(final Method method) {
        if (method == null
            || method.getReturnType().equals(Future.class)
            || method.getReturnType().equals(Response.class)) {
            return Boolean.FALSE;
        }
        
        WebMethod wm = method.getAnnotation(WebMethod.class);
        if (wm != null) {
            if (wm.exclude()) {
                return Boolean.FALSE;
            } else {
                return Boolean.TRUE;
            }
        } 
        if (method.getDeclaringClass().isInterface()) {
            return hasWebServiceAnnotation(method);
        }
        if (implInfo.getSEIClass() == null) {
            return hasWebServiceAnnotation(method);
        }
        return
implInfo.getSEIClass().isAssignableFrom(method.getDeclaringClass()); }

Methods in an serviceClass which don't have annotations reaches
the last line
"implInfo.getSEIClass().isAssignableFrom(method.getDeclaringClass()"

which returns true because in my case the SEIClass is
SalaryDeclarationPort and the Delcaring class is
SalaryDeclarationServiceImpl which implements SalaryDeclarationPort.

For what is the last line good for?

Thanks

Marc



> 
> Willem
> 
> On Sat, Nov 15, 2008 at 1:23 AM, Marc Giger <[EMAIL PROTECTED]> wrote:
> 
> > Hi Willem,
> >
> > Yes, the class itself and any service methods are annotated.
> >
> > @javax.jws.WebService(name = "SalaryDeclarationPort", serviceName =
> > "SalaryDeclarationService", portName = "SalaryDeclaration",
> >        targetNamespace =
> > "http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationService";,
> > endpointInterface =
> >
> > "ch.swissdec.schema.sd._20051002.salarydeclarationservice.SalaryDeclarationPort")
> > public class SalaryDeclarationServiceImpl implements
> > SalaryDeclarationPort {
> > ...
> >
> > @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
> >    @WebResult(name = "PingResponse", targetNamespace =
> > "http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationServiceTypes";,
> > partName = "parameters") @WebMethod(operationName = "Ping") public
> > PingType ping(@WebParam(partName = "parameters", name= "Ping",
> > targetNamespace =
> > "http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationServiceTypes";)
> > PingType parameters) {
> > ...
> >
> > In my case the ReflectionServiceFactoryBean tries to setup my
> > service although I have annotated the service:
> > Caused by:
> > org.apache.cxf.service.factory.ServiceConstructionException: Service
> > class
> >
> > ch.itserve.lohnstandard.refapps2.receiver.ws20051002.service.SalaryDeclarationServiceImpl
> > method setTransformer part
> > {
> > http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationService}setTransformer<http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationService%7DsetTransformer>
> > cannot be mapped to schema. Check for use of a JAX-WS-specific type
> > without the JAX-WS service factory bean. at
> >
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createBareMessage(ReflectionServiceFactoryBean.java:969)
> > at
> >
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:343)
> >
> > Further ideas?
> >
> > Thanks
> >
> > Marc
> >
> >
> > On Fri, 14 Nov 2008 23:38:45 +0800
> > Willem Jiang <[EMAIL PROTECTED]> wrote:
> >
> > > Hi Marc,
> > >
> > > Does the
> > >
> > ch.itserve.lohnstandard.refapps2.receiver.ws20051002.service.SalaryDeclarationServiceImpl
> > > has any JAXWS annotation ?
> > > If not , camel-cxf component will using the
> > > RelectionServiceFactoryBean instead of JaxWsServiceFactoryBean to
> > > create the service.
> > >
> > > Willem
> > >
> > > Marc Giger wrote:
> > > > Hi Benson
> > > >
> > > > My setup (with camel-routing) :-)
> > > > Any ideas?
> > > >
> > > > Thank you!
> > > >
> > > > Marc
> > > >
> > > > <bean id="salaryDeclarationServiceImpl"
> > > >
> > class="ch.itserve.lohnstandard.refapps2.receiver.ws20051002.service.SalaryDeclarationServiceImpl">
> > > >         <property name="userConfig" ref="userConfig"/>
> > > >         <property name="messageStore" ref="messageStore"/>
> > > >         <property name="resourceLoader"
> > > > ref="defaultResourceLoader"/> <property name="transformer"
> > > > ref="xslTransformer"/> <property name="logStore"
> > > > ref="logStore"/> <property name="defaultUser"
> > > > ref="defaultUserInstance"/> <property name="wsUtils20051002"
> > > > ref="wsUtils"/> </bean>
> > > >
> > > >     <cxf:cxfEndpoint id="routerEndpoint"
> > > > address="/SalaryDeclarationService"
> > > >
> > serviceClass="ch.itserve.lohnstandard.refapps2.receiver.ws20051002.service.SalaryDeclarationServiceImpl">
> > > > <cxf:outFaultInterceptors> <ref
> > > > bean="prepareMessageStoreFaultOutInterceptor"/> <ref
> > > > bean="messageStoreFaultOutInterceptor"/>
> > > > </cxf:outFaultInterceptors> </cxf:cxfEndpoint>
> > > >
> > > >     <jaxws:endpoint id="salaryDeclarationServiceJAXWS"
> > > > implementor="#salaryDeclarationServiceImpl"
> > > > address="local://SalaryDeclarationServiceJAXWS">
> > > > <jaxws:inInterceptors> <bean
> > > >
> > class="ch.itserve.lohnstandard.refapps2.shared.webservice.server.interceptors.IDInInterceptor"/>
> > > > <bean
> > > >
> > class="ch.itserve.lohnstandard.refapps2.shared.webservice.server.interceptors.RemoveInterceptorsInterceptor"/>
> > > > <ref bean="wss4jInSignatureInterceptor"/> <ref
> > > > bean="eivWebInInterceptor"/> </jaxws:inInterceptors>
> > > > <jaxws:outInterceptors> <bean
> > > > class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
> > > > <ref bean="wss4jOutSignatureInterceptor"/> <ref
> > > > bean="tamperSignatureOutInterceptor"/> <ref
> > > > bean="messageStoreAfterSignatureOutInterceptor"/> <ref
> > > > bean="wss4JOutEncryptInterceptor"/> <ref
> > > > bean="tamperEncryptionOutInterceptor"/> <ref
> > > > bean="messageStoreAfterEnctyptionOutInterceptor"/>
> > > > </jaxws:outInterceptors> <jaxws:outFaultInterceptors>
> > > >             <ref bean="faultCatcherOutInterceptor"/>
> > > >             <ref bean="prepareMessageStoreFaultOutInterceptor"/>
> > > >             <ref bean="messageStoreFaultOutInterceptor"/>
> > > >         </jaxws:outFaultInterceptors>
> > > >         <jaxws:properties>
> > > >             <entry key="schema-validation-enabled"
> > > > value="true"/> </jaxws:properties>
> > > >         <jaxws:schemaLocations>
> > > >
> > <jaxws:schemaLocation>wsdl/SalaryDeclaration.xsd</jaxws:schemaLocation>
> > > >
> > <jaxws:schemaLocation>wsdl/SalaryDeclarationContainer.xsd</jaxws:schemaLocation>
> > > >
> > <jaxws:schemaLocation>wsdl/SalaryDeclarationServiceTypes.xsd</jaxws:schemaLocation>
> > > >         </jaxws:schemaLocations>
> > > >     </jaxws:endpoint>
> > > >
> > > >     <cxf:cxfEndpoint id="localEndpoint"
> > > > address="local://SalaryDeclarationServiceJAXWS"
> > > > transportId="http://cxf.apache.org/transports/local";
> > > > wsdlURL="wsdl/wsdl/SalaryDeclarationService.wsdl"
> > > >
> > serviceClass="ch.itserve.lohnstandard.refapps2.receiver.ws20051002.service.SalaryDeclarationServiceImpl"
> > > > endpointName="s:SalaryDeclaration"
> > > > serviceName="s:SalaryDeclarationService"
> > > > xmlns:s="
> > http://www.swissdec.ch/schema/sd/20051002/SalaryDeclarationService";>
> > > > <cxf:properties> <entry
> > > > key="org.apache.cxf.transport.local.LocalConduit.directDispatch">
> > > > <value type="java.lang.Boolean">true</value> </entry>
> > > >         </cxf:properties>
> > > >     </cxf:cxfEndpoint>
> > > >
> > > >
> > > > On Fri, 14 Nov 2008 08:14:03 -0500
> > > > "Benson Margulies" <[EMAIL PROTECTED]> wrote:
> > > >
> > > >> This suggests that you are using Holder or something like it
> > > >> with the wrong configuration. Details?
> > > >>
> > > >> On Fri, Nov 14, 2008 at 8:10 AM, Marc Giger <[EMAIL PROTECTED]>
> > > >> wrote:
> > > >>> Hi all,
> > > >>>
> > > >>> I've tried to upgrade cxf from 2.0.7 to cxf 2.0.9
> > > >>> and hit the following error on startup:
> > > >>>
> > > >>> "Message part {0} of Message {1} cannot be processed. This
> > > >>> can be caused by the use of JAX-WS-specific types without the
> > > >>> JAX-WS service factory bean."
> > > >>>
> > > >>> This new check was introduced in commit 688596. What is the
> > > >>> reason behind that?
> > > >>>
> > > >>> My service class has some public setter methods for spring
> > > >>> dependency injection, where it fails now because these methods
> > > >>> aren't ws-service specific methods.
> > > >>>
> > > >>> What is the correct solution now?
> > > >>>
> > > >>> Thanks!
> > > >>>
> > > >>> Marc
> > > >>>
> > > >
> > > >
> >

Reply via email to