0

I'm trying to specify the timeout for a CXF service. I'm using the Play Framework along with JAX-RS and CXF (I've tried multiple versions,3.07 and 3.10).

This is the exception that I get:

2017-02-19 13:07:09,786 [error] - controllers.GPSWebServiceController - Error calling wsSanctionsPEPCheckV2 operation on GPS endpoint.
java.util.concurrent.CompletionException: javax.xml.ws.soap.SOAPFaultException: Error creating bean with name '*.http-conduit': Cannot create inner bean '(inner bean)#741a1e82' of type [org.a
pache.cxf.configuration.spring.JAXBBeanFactory] while setting bean property 'client'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with nam
e '(inner bean)#741a1e82': Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Object]: Fa
ctory method 'createJAXBBean' threw exception; nested exception is java.lang.RuntimeException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'h' (code 104) in start tag Expected a quote
 at [row,col {unknown-source}]: [1,35]]
        at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
        at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1592)
        at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:56)
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:405)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: javax.xml.ws.soap.SOAPFaultException: Error creating bean with name '*.http-conduit': Cannot create inner bean '(inner bean)#741a1e82' of type [org.apache.cxf.configuration.spring.
JAXBBeanFactory] while setting bean property 'client'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#741a1e82': Bean
 instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Object]: Factory method 'createJAXBBean' t
hrew exception; nested exception is java.lang.RuntimeException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'h' (code 104) in start tag Expected a quote
 at [row,col {unknown-source}]: [1,35]]
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:161)
        at com.sun.proxy.$Proxy69.wsSanctionsPEPCheckV2(Unknown Source)
        at services.pepcheck.PepCheckServiceImpl.lambda$performPepCheck$33(PepCheckServiceImpl.java:114)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
        ... 7 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '*.http-conduit': Cannot create inner bean '(inner bean)#741a1e82' of type [org.apache.cxf.co
nfiguration.spring.JAXBBeanFactory] while setting bean property 'client'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner be
an)#741a1e82': Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.Object]: Factory method
 'createJAXBBean' threw exception; nested exception is java.lang.RuntimeException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'h' (code 104) in start tag Expected a quote
 at [row,col {unknown-source}]: [1,35]]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1231)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.configureBean(AbstractAutowireCapableBeanFactory.java:323)
        at org.springframework.beans.factory.wiring.BeanConfigurerSupport.configureBean(BeanConfigurerSupport.java:147)
        at org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:177)
        at org.apache.cxf.configuration.spring.ConfigurerImpl.configureWithWildCard(ConfigurerImpl.java:202)

And this is the beans.xml file

<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:http-conf="http://cxf.apache.org/transports/http/configuration"                                                                                                                   
       xmlns:cxf="http://cxf.apache.org/core"                                                                                                                                                  
       xsi:schemaLocation="http://www.springframework.org/schema/beans                                                                                                                         
      http://www.springframework.org/schema/beans/spring-beans-4.3.xsd                                                                                                                         
      http://cxf.apache.org/configuration/security                                                                                                                                             
      http://cxf.apache.org/schemas/configuration/security.xsd                                                                                                                                 
      http://cxf.apache.org/transports/http/configuration                                                                                                                                      
      http://cxf.apache.org/schemas/configuration/http-conf.xsd                                                                                                                                
      http://cxf.apache.org/core                                                                                                                                                               
      http://cxf.apache.org/schemas/core.xsd                                                                                                                                                   
      http://cxf.apache.org/jaxws                                                                                                                                                              
      http://cxf.apache.org/schemas/jaxws.xsd">                                                                                                                                                


    <jaxws:client id="mySoapClient"                                                                                                                                                    
                  serviceClass="ro.vdin.ServiceSoap"                                                                                                                   
                  address="https://example.com"/>                                                                                                                                            

    <http-conf:conduit name="*.http-conduit">                                                                                                                                                  
        <http-conf:client ConnectionTimeout="60000"                                                                                                                                            
                          ReceiveTimeout="60000"                                                                                                                                               
                          AllowChunking="false"/>                                                                                                                                              
    </http-conf:conduit>
</beans>

I receive this message only if the http-conf:conduit matches the service; if I put some random name like , then I receive no exception (but no timeout, either).

Any ideas?

Vlad Dinulescu
  • 1,173
  • 1
  • 14
  • 24

1 Answers1

0

I had a similar issue when using CXF on Play Framework. I don't know exactly why, but you cannot use the *.http-conduit wildcard. You have to specify directly the hostname : <http-conf:conduit name="https://example.com">

And if you have multiple web services, you can use regexp to match all of them.

Example: if you have https://example.com/service1 and https://example.com/service2 endpoints, the configuration would be <http-conf:conduit name="https://example.com/.*">

Damien Beaufils
  • 544
  • 6
  • 10
  • Thanks for the suggestion! Unfortunately, I've tried that and I still receive the same error (like ; also tried with regex name="https://example.com:5678.*" and name="https://example.com:5678/service.asmx.*" ) – Vlad Dinulescu Feb 20 '17 at 09:29
  • @VladDinulescu Did you try to add the protocol? I think you have to specify it: `name="https://example.com:5678/.*"`. Maybe the issue is not with the http-conf:conduit. Is it normal that the `jaxws:client` `address` is `"https://example.com"`? It should be the full web service endpoint: `"https://example.com:5678/service.asmx"` – Damien Beaufils Feb 20 '17 at 17:07
  • Well... I did add the protocol; I think StackOverflow formatted my comment and I didn't notice. Also, about the jaxws:client address, yes, I put the full webservice endpoint, but I don't want to put it on SO because of privacy purposes. (as I said in the description, I can fully access the service, it's just that I cannot set the timeouts properly). – Vlad Dinulescu Feb 20 '17 at 21:19
  • @VladDinulescu Maybe you could try a Java configuration instead of XML? See https://stackoverflow.com/questions/21223626/apache-cxf-spring-java-config-no-xml – Damien Beaufils Feb 22 '17 at 09:00