Mirloco
Mirloco

Reputation: 25

CXF-WS integration with spring boot (jhipster stack)

I try to integrate CXF WS to jhipster stack, so avoid xml configuration.

The first class to config service

@EnableWs
@Configuration
@AutoConfigureAfter(WebConfigurer.class)
public class WebServiceConfig extends WsConfigurerAdapter {

    @Bean
    public ServletRegistrationBean dispatcherServlet() {
        CXFServlet cxfServlet = new CXFServlet();
        return new ServletRegistrationBean(cxfServlet, "/soap/*");
    }

    @Bean(name = "cxf")
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    public Hello hello() {
        return new HelloPortImpl();
    }

    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), hello());
        endpoint.publish("/hello");
        return endpoint;
    }
}

The second file :

@WebService(targetNamespace = "http://service.ws.sample/", name = "Hello")
public interface Hello {


    @WebResult(name = "return", targetNamespace = "")
    @RequestWrapper(localName = "sayHello", targetNamespace = "http://service.ws.sample/", className = "com.orange.api.rfid.tacites.proxyauth.web.restWS.SayHello")
    @WebMethod(action = "urn:SayHello")
    @ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "http://service.ws.sample/", className = "com.orange.api.rfid.tacites.proxyauth.web.restWS.SayHelloResponse")
    public java.lang.String sayHello(
        @WebParam(name = "myname", targetNamespace = "")
        java.lang.String myname
    );
}

The third file

@javax.jws.WebService(
    serviceName = "HelloService",
    portName = "HelloPort",
    targetNamespace = "http://service.ws.sample/",
    endpointInterface = "com.orange.api.rfid.tacites.proxyauth.web.restWS.Hello")


public class HelloPortImpl implements Hello {

    private static final Logger LOG = Logger.getLogger(HelloPortImpl.class.getName());

    public java.lang.String sayHello(java.lang.String myname) {
        LOG.info("Executing operation sayHello" + myname);
        try {
            return "Welcome to CXF Spring boot " + myname + "!!!";
        } catch (java.lang.Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
    }
}

In my logs when start spring boot, i have this line:

[DEBUG] com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator - Wrigin XML Schema for com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator@6a08fd54[http://service.ws.sample/=com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace@76617add]
com.sun.xml.bind.v2.util.StackRecorder: null
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator.write(XmlSchemaGenerator.java:441) [jaxb-impl-2.2.jar:2.2]

The problem is Jhipster index.html is not found and in http://localhost:8080/soap/hello i have No binding operation info while invoking unknown method with params unknown

I think the cxf servlet kill first one servlet, how to configure to coexist both?

Regards

Upvotes: 1

Views: 2117

Answers (3)

guboi
guboi

Reputation: 197

I've got this error when not specifying the proper wsdl name. Verify that the Soap Service instance uses a proper path to wsdl.

Upvotes: 0

Mirloco
Mirloco

Reputation: 25

To solve the issue, i add to WebConfigurer.java:

/**
 * Initialize cxf - ws
 */
private void initCxf(ServletContext servletContext) {
    log.debug("Initialize cxf - ws");
    ServletRegistration.Dynamic cxfServlet = servletContext.addServlet("CxfWS", new CXFServlet());
    cxfServlet.addMapping("/soap/*");
    cxfServlet.setLoadOnStartup(3);
}

Upvotes: 0

Gaël Marziou
Gaël Marziou

Reputation: 16294

Try renaming your WebServiceConfig.dispatcherServlet method to something else as there is probably a bean with this name defined by Spring Boot that you're overriding.

Upvotes: 1

Related Questions