JAX-WS = When Apache CXF is installed it “steals” default JDK JAX-WS implementation, how to solve?

后端 未结 5 1276
轮回少年
轮回少年 2020-11-28 03:15

I have a strange problem.

  1. Using wsimport I generated als JAX-WS Code from a WSDL (in a dedicated eclipse java project). This works fine in JDK6 without any

5条回答
  •  悲&欢浪女
    2020-11-28 03:44

    I tried the other and I just couldn't make it work at all, so to set CXF if it was not set to CXF, I just override the delegate inside the service.

     try {
            loc = this.getClass().getResource(wsdlResource); 
            QName qName = new QName( wsTargetNamespace, wsName );
            service = new YourWS(loc, qName);
            Field delegateField = Service.class.getDeclaredField("delegate"); //ALLOW CXF SPECIFIC SERVICE DELEGATE ONLY!
            delegateField.setAccessible(true);
            ServiceDelegate previousDelegate = (ServiceDelegate) delegateField.get(service);
            if (!previousDelegate.getClass().getName().contains("cxf")) {
                ServiceDelegate serviceDelegate = ((Provider) Class.forName("org.apache.cxf.jaxws.spi.ProviderImpl").newInstance())
                    .createServiceDelegate(loc, qName, service.getClass());
                log.info("The " + getClass().getSimpleName() + " delegate is changed from " + "[" + previousDelegate + "] to [" +
                    serviceDelegate +
                    "]");
                delegateField.set(service, serviceDelegate);
            }
            port = service.getYourWSSoap();
    

提交回复
热议问题