
com.guicedee.guicedservlets.webservices.implementations.CxfNonSpring Maven / Gradle / Ivy
package com.guicedee.guicedservlets.webservices.implementations;
import com.google.inject.Singleton;
import com.guicedee.guicedinjection.GuiceContext;
import com.guicedee.guicedservlets.webservices.WSContext;
import com.guicedee.logger.LogFactory;
import io.github.classgraph.ClassInfo;
import org.apache.cxf.BusFactory;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
import jakarta.jws.WebService;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.xml.ws.Endpoint;
import java.util.logging.Level;
@Singleton
public class CxfNonSpring
extends CXFNonSpringServlet
{
@Override
protected void loadBus(ServletConfig sc)
{
super.loadBus(sc);
BusFactory.setDefaultBus(getBus());
for (ClassInfo classInfo : GuiceContext.instance()
.getScanResult()
.getClassesWithAnnotation(WebService.class.getCanonicalName()))
{
Class> calledType = classInfo.loadClass();
WebService anno = calledType.getAnnotation(WebService.class);
try
{
if (classInfo.isInterface() || classInfo.isAbstract())
{
LogFactory.getLog(CxfNonSpring.class)
.log(Level.WARNING, "Not creating web service for [" + calledType.getCanonicalName() + "]. Interface/Abstract.");
continue;
}
Object o = GuiceContext.get(calledType);
Endpoint endpoint = Endpoint.create(o);
String path = (anno.name()
.isEmpty() ? "/" + calledType.getSimpleName() : anno.name());
path = WebServiceServletModule.cleanPath(WSContext.baseWSUrl) + path;
path = path.replace("//", "/");
Endpoint.publish(path, o);
LogFactory.getLog(CxfNonSpring.class)
.info("WS Endpoint Active on Default WSContext Settings : " + path);
}
catch (Exception e)
{
LogFactory.getLog(CxfNonSpring.class)
.log(Level.SEVERE, "Not creating web service for [" + calledType.getCanonicalName() + "]. - " + e.getMessage(), e);
LogFactory.getLog(CxfNonSpring.class)
.log(Level.FINER, "Unable to bind Web Service for [" + calledType.getCanonicalName() + "]. This is usually because it is an internal one", e);
}
}
}
@Override
protected void invoke(HttpServletRequest request, HttpServletResponse response) throws ServletException
{
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request)
{
@Override
public String getPathInfo()
{
return WSContext.baseWSUrl + super.getPathInfo();
}
};
super.invoke(wrapper, response);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy