CXF служить статическим HTML - PullRequest
0 голосов
/ 13 февраля 2019

Я использую cxf и spring без web.xml для создания службы SOAP.Но для того, чтобы наша система bigIP работала, мне нужно обслуживать статическую HTML-страницу только с текстом OK на заданном URI.Я попытался использовать решение, показанное в https://stackoverflow.com/a/37276792/10717570, но оно не работает для меня.Он просто возвращает ошибку 404.

public class ClasspathResourceResolver {
private String resourceLocation;

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

public String getPath() {
    if (!StringUtils.isEmpty(resourceLocation)) {
        try {
            Path currentRelativePath = Paths.get("");
            String s = currentRelativePath.toAbsolutePath().toString();
            LOG.debug("Current relative path is: " + s);

            String ret = new ClassPathResource(resourceLocation).getFile().getCanonicalPath();

            LOG.debug("returning: " + ret);

            return ret;
        }
        catch (Exception e) {
            LOG.warn("Unable to resolve classpath as canonical path", e);
        }
    }
    return null;
}

public void setResourceLocation(String resourceLocation) {
    this.resourceLocation = resourceLocation;

}

    <bean name="contextHandler" class="org.eclipse.jetty.server.handler.ContextHandler">
    <property name="contextPath" value="/sentralforskrivning/hsjekk"/>
    <property name="handler" ref="resourceHandler"/>
</bean>

<bean id="resourceHandler" class="org.eclipse.jetty.server.handler.ResourceHandler">
    <property name="resourceBase" value="#{classpathResourceResolver.path}"/>
    <property name="directoriesListed" value="true"/>
</bean>

<bean id="classpathResourceResolver" class="com.webservice.sf.ClasspathResourceResolver">
    <property name="resourceLocation" value="hsjekk.html"/>
</bean>

<jaxws:endpoint id="sfEndpoint"
                bus="cxf"
                implementor="com.webservice.sf.sfWebPort"                
                address="http://localhost:${sfm.port}/sf/sfWebServiceSoapHttpPort">
    <jaxws:inInterceptors>
        <ref bean="jwtInInterceptor"/>
    </jaxws:inInterceptors>
</jaxws:endpoint>

У кого-нибудь есть указания на то, что я должен делать?И как мне это решить?Спасибо:)

1 Ответ

0 голосов
/ 21 февраля 2019

Мы обнаружили, что у Jetty может быть только один обработчик, поэтому в итоге мы использовали ContextHandler, добавив его программно:

Server server = new Server(8896);
    ServletContextHandler context = new ServletContextHandler();
    context.setContextPath("/");

в контексте, где вы можете добавить любой сервлет, какой захотите, мы использовали его для установки нашегоwebservice и сервлет проверки работоспособности, а затем установите контекст в обработчике.

ContextHandlerCollection handlers = new ContextHandlerCollection();
    handlers.setHandlers(new Handler[] {context, new DefaultHandler()});
    server.setHandler(handlers);
    server.start();
    System.out.println("Server ready...");
    server.join();

Надеюсь, это поможет вам, ребята.

...