|
Here is a short list of links related to this Apache CXF OsgiServletController.java source code file:
Apache CXF example source code file (OsgiServletController.java)
The Apache CXF OsgiServletController.java source code/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.transport.http_osgi; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.cxf.Bus; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.HttpHeaderHelper; import org.apache.cxf.message.ExchangeImpl; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.resource.ResourceManager; import org.apache.cxf.security.SecurityContext; import org.apache.cxf.service.model.EndpointInfo; import org.apache.cxf.service.model.OperationInfo; import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.apache.cxf.transport.http.HTTPSession; import org.apache.cxf.transport.https.SSLUtils; import org.apache.cxf.transport.servlet.AbstractServletController; import org.apache.cxf.transports.http.QueryHandler; import org.apache.cxf.transports.http.QueryHandlerRegistry; import org.apache.cxf.wsdl.http.AddressType; public class OsgiServletController extends AbstractServletController { private static final Logger LOG = LogUtils.getL7dLogger(OsgiServlet.class); private OsgiServlet servlet; public OsgiServletController(OsgiServlet servlet) { super(servlet.getServletConfig()); this.servlet = servlet; } private synchronized void updateDests(HttpServletRequest request) { if (disableAddressUpdates) { return; } String base = forcedBaseAddress == null ? getBaseURL(request) : forcedBaseAddress; Set<String> paths = servlet.getTransport().getDestinationsPaths(); for (String path : paths) { OsgiDestination d2 = servlet.getTransport().getDestinationForPath(path); String ad = d2.getEndpointInfo().getAddress(); if (ad.equals(path)) { d2.getEndpointInfo().setAddress(base + path); if (d2.getEndpointInfo().getExtensor(AddressType.class) != null) { d2.getEndpointInfo().getExtensor(AddressType.class).setLocation(base + path); } } } } public void invoke(HttpServletRequest request, HttpServletResponse res) throws ServletException { try { EndpointInfo ei = new EndpointInfo(); String address = request.getPathInfo() == null ? "" : request.getPathInfo(); ei.setAddress(address); OsgiDestination d = (OsgiDestination)servlet.getTransport().getDestinationForPath(ei.getAddress()); if (d == null) { if (!isHideServiceList && (request.getRequestURI().endsWith(serviceListRelativePath) || request.getRequestURI().endsWith(serviceListRelativePath + "/")) || StringUtils.isEmpty(request.getPathInfo()) || "/".equals(request.getPathInfo())) { updateDests(request); generateServiceList(request, res); } else { d = checkRestfulRequest(request); if (d == null || d.getMessageObserver() == null) { LOG.warning("Can't find the the request for " + request.getRequestURL() + "'s Observer "); generateNotFound(request, res); } else { // the request should be a restful service request updateDests(request); invokeDestination(request, res, d); } } } else { ei = d.getEndpointInfo(); Bus bus = d.getBus(); ClassLoader orig = Thread.currentThread().getContextClassLoader(); try { ResourceManager manager = bus.getExtension(ResourceManager.class); if (manager != null) { ClassLoader loader = manager.resolveResource("", ClassLoader.class); if (loader != null) { //need to set the context classloader to the loader of the bundle Thread.currentThread().setContextClassLoader(loader); } } if (null != request.getQueryString() && request.getQueryString().length() > 0 && bus.getExtension(QueryHandlerRegistry.class) != null) { String ctxUri = request.getPathInfo(); String baseUri = request.getRequestURL().toString() + "?" + request.getQueryString(); // update the EndPoint Address with request url if ("GET".equals(request.getMethod())) { updateDests(request); } for (QueryHandler qh : bus.getExtension(QueryHandlerRegistry.class).getHandlers()) { if (qh.isRecognizedQuery(baseUri, ctxUri, ei)) { res.setContentType(qh.getResponseContentType(baseUri, ctxUri)); OutputStream out = res.getOutputStream(); try { qh.writeResponse(baseUri, ctxUri, ei, out); out.flush(); return; } catch (Exception e) { LOG.warning(qh.getClass().getName() + " Exception caught writing response: " + e.getMessage()); throw new ServletException(e); } } } } else if ("/".equals(address) || address.length() == 0) { updateDests(request); } invokeDestination(request, res, d); } finally { Thread.currentThread().setContextClassLoader(orig); } } } catch (IOException e) { throw new ServletException(e); } } private OsgiDestination checkRestfulRequest(HttpServletRequest request) throws IOException { String address = request.getPathInfo() == null ? "" : request.getPathInfo(); for (String path : servlet.getTransport().getDestinationsPaths()) { if (address.startsWith(path)) { return servlet.getTransport().getDestinationForPath(path); } } return null; } protected void generateServiceList(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=UTF-8"); response.getWriter().write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" " + "\"http://www.w3.org/TR/html4/loose.dtd\">"); response.getWriter().write("<HTML>"); if (serviceListStyleSheet != null) { response.getWriter().write( "<LINK type=\"text/css\" rel=\"stylesheet\" href=\"" + request.getContextPath() + "/" + serviceListStyleSheet + "\">"); } else { response.getWriter().write( "<LINK type=\"text/css\" rel=\"stylesheet\" href=\"" + request.getRequestURI() + "/?stylesheet=1\">"); } response.getWriter().write("<meta http-equiv=content-type content=\"text/html; charset=UTF-8\">"); response.getWriter().write("<title>CXF - Service list"); response.getWriter().write("</head>"); Collection<OsgiDestination> destinations = servlet.getTransport().getDestinations(); if (destinations.size() > 0) { writeSOAPEndpoints(response, destinations); writeRESTfulEndpoints(response, destinations); } else { response.getWriter().write("<span class=\"heading\">No services have been found."); } response.getWriter().write("</body>"); } private void writeSOAPEndpoints(HttpServletResponse response, Collection<OsgiDestination> destinations) throws IOException { response.getWriter().write("<span class=\"heading\">Available SOAP services: | "); response.getWriter().write("<span class=\"porttypename\">" + sd.getEndpointInfo().getInterface().getName().getLocalPart() + "</span>"); response.getWriter().write("<ul>"); for (OperationInfo oi : sd.getEndpointInfo().getInterface().getOperations()) { response.getWriter().write("<li>" + oi.getName().getLocalPart() + ""); } response.getWriter().write("</ul>"); response.getWriter().write("</td> | "); String address = sd.getEndpointInfo().getAddress(); response.getWriter().write("<span class=\"field\">Endpoint address: " + "<span class=\"value\">" + address + ""); response.getWriter().write("<br/>WSDL : " + "<a href=\"" + address + "?wsdl\">" + sd.getEndpointInfo().getService().getName() + "</a>"); response.getWriter().write("<br/>Target namespace: " + "<span class=\"value\">" + sd.getEndpointInfo().getService().getTargetNamespace() + "</span>"); response.getWriter().write("</td> | |
"); String address = sd.getEndpointInfo().getAddress(); response.getWriter().write("<span class=\"field\">Endpoint address: " + "<span class=\"value\">" + address + ""); response.getWriter().write("<br/>WADL : " + "<a href=\"" + address + "?_wadl&_type=xml\">" + address + "?_wadl&type=xml" + "</a>"); response.getWriter().write("</td> |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.