axisservlet.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 828 行 · 第 1/3 页
JAVA
828 行
* @throws IOException
*/
protected void doPut(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
initContextRoot(request);
// this method is also used to serve for the listServices request.
if (!disableREST) {
new RestRequestProcessor(Constants.Configuration.HTTP_METHOD_PUT, request, response)
.processXMLRequest();
} else {
showRestDisabledErrorMessage(response);
}
}
/**
* Private method that deals with disabling of REST support.
*
* @param response
* @throws IOException
*/
protected void showRestDisabledErrorMessage(HttpServletResponse response) throws IOException {
PrintWriter writer = new PrintWriter(response.getOutputStream());
writer.println("<html><body><h2>Please enable REST support in WEB-INF/conf/axis2.xml " +
"and WEB-INF/web.xml</h2></body></html>");
writer.flush();
response.setStatus(HttpServletResponse.SC_ACCEPTED);
}
/**
* Close the builders.
*
* @param messageContext
* @throws ServletException
*/
private void closeStaxBuilder(MessageContext messageContext) throws ServletException {
if (closeReader && messageContext != null) {
try {
SOAPEnvelope envelope = messageContext.getEnvelope();
if(envelope != null) {
StAXBuilder builder = (StAXBuilder) envelope.getBuilder();
if (builder != null) {
builder.close();
}
}
} catch (Exception e) {
log.debug(e.toString(), e);
}
}
}
/**
* Processing for faults
*
* @param msgContext
* @param res
* @param out
* @param e
*/
private void processAxisFault(MessageContext msgContext, HttpServletResponse res,
OutputStream out, AxisFault e) {
try {
// If the fault is not going along the back channel we should be 202ing
if (AddressingHelper.isFaultRedirected(msgContext)) {
res.setStatus(HttpServletResponse.SC_ACCEPTED);
} else {
String status =
(String) msgContext.getProperty(Constants.HTTP_RESPONSE_STATE);
if (status == null) {
res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} else {
res.setStatus(Integer.parseInt(status));
}
AxisBindingOperation axisBindingOperation =
(AxisBindingOperation) msgContext
.getProperty(Constants.AXIS_BINDING_OPERATION);
if (axisBindingOperation != null) {
AxisBindingMessage fault = axisBindingOperation
.getFault((String) msgContext.getProperty(Constants.FAULT_NAME));
if (fault != null) {
Integer code = (Integer) fault.getProperty(WSDL2Constants.ATTR_WHTTP_CODE);
if (code != null) {
res.setStatus(code.intValue());
}
}
}
}
handleFault(msgContext, out, e);
} catch (AxisFault e2) {
log.info(e2);
}
}
protected void handleFault(MessageContext msgContext, OutputStream out, AxisFault e)
throws AxisFault {
msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
MessageContext faultContext =
MessageContextBuilder.createFaultMessageContext(msgContext, e);
// SOAP 1.2 specification mentions that we should send HTTP code 400 in a fault if the
// fault code Sender
HttpServletResponse response =
(HttpServletResponse) msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE);
if (response != null) {
//TODO : Check for SOAP 1.2!
SOAPFaultCode code = faultContext.getEnvelope().getBody().getFault().getCode();
OMElement valueElement = null;
if (code != null) {
valueElement = code.getFirstChildWithName(new QName(
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI,
SOAP12Constants.SOAP_FAULT_VALUE_LOCAL_NAME));
}
if (valueElement != null) {
if (SOAP12Constants.FAULT_CODE_SENDER.equals(valueElement.getTextAsQName().getLocalPart())
&& !msgContext.isDoingREST()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
}
AxisEngine.sendFault(faultContext);
}
/**
* Main init method
*
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
this.servletConfig = config;
ServletContext servletContext = servletConfig.getServletContext();
this.configContext =
(ConfigurationContext) servletContext.getAttribute(CONFIGURATION_CONTEXT);
if(configContext == null){
configContext = initConfigContext(config);
config.getServletContext().setAttribute(CONFIGURATION_CONTEXT, configContext);
}
axisConfiguration = configContext.getAxisConfiguration();
ListenerManager listenerManager = new ListenerManager();
listenerManager.init(configContext);
TransportInDescription transportInDescription = new TransportInDescription(
Constants.TRANSPORT_HTTP);
transportInDescription.setReceiver(this);
listenerManager.addListener(transportInDescription, true);
listenerManager.start();
ListenerManager.defaultConfigurationContext = configContext;
agent = new ListingAgent(configContext);
initParams();
} catch (Exception e) {
throw new ServletException(e);
}
}
/**
* distroy the ConfigurationContext
*/
public void destroy() {
//stoping listner manager
try {
if (configContext != null) {
configContext.terminate();
}
} catch (AxisFault axisFault) {
log.info(axisFault.getMessage());
}
try {
super.destroy();
} catch (Exception e) {
log.info(e.getMessage());
}
}
/**
* Initializes the Axis2 parameters.
*/
protected void initParams() {
Parameter parameter;
// do we need to completely disable REST support
parameter = axisConfiguration.getParameter(Constants.Configuration.DISABLE_REST);
if (parameter != null) {
disableREST = !JavaUtils.isFalseExplicitly(parameter.getValue());
}
// Should we close the reader(s)
parameter = axisConfiguration.getParameter("axis2.close.reader");
if (parameter != null) {
closeReader = JavaUtils.isTrueExplicitly(parameter.getValue());
}
}
/**
* Convenient method to re-initialize the ConfigurationContext
*
* @throws ServletException
*/
public void init() throws ServletException {
if (this.servletConfig != null) {
init(this.servletConfig);
}
}
/**
* Initialize the Axis configuration context
*
* @param config Servlet configuration
* @return ConfigurationContext
* @throws ServletException
*/
protected ConfigurationContext initConfigContext(ServletConfig config) throws ServletException {
try {
ConfigurationContext configContext =
ConfigurationContextFactory
.createConfigurationContext(new WarBasedAxisConfigurator(config));
configContext.setProperty(Constants.CONTAINER_MANAGED, Constants.VALUE_TRUE);
return configContext;
} catch (Exception e) {
throw new ServletException(e);
}
}
/**
* Set the context root if it is not set already.
*
* @param req
*/
public void initContextRoot(HttpServletRequest req) {
if (contextRoot != null && contextRoot.trim().length() != 0) {
return;
}
String contextPath = req.getContextPath();
//handling ROOT scenario, for servlets in the default (root) context, this method returns ""
if (contextPath != null && contextPath.length() == 0) {
contextPath = "/";
}
this.contextRoot = contextPath;
configContext.setContextRoot(contextRoot);
}
/**
* Get all transport headers.
*
* @param req
* @return Map
*/
protected Map getTransportHeaders(HttpServletRequest req) {
return new TransportHeaders(req);
}
public EndpointReference getEPRForService(String serviceName, String ip) throws AxisFault {
return getEPRsForService(serviceName, ip)[0];
}
public EndpointReference[] getEPRsForService(String serviceName, String ip) throws AxisFault {
//RUNNING_PORT
String port = (String) configContext.getProperty(ListingAgent.RUNNING_PORT);
if (port == null) {
port = "8080";
}
if (ip == null) {
try {
ip = HttpUtils.getIpAddress(axisConfiguration);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?