httpworker.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 351 行 · 第 1/2 页
JAVA
351 行
schema = (XmlSchema) schemaTable.get(schemaKey);
}
}
//schema found - write it to the stream
if (schema != null) {
response.setStatus(HttpStatus.SC_OK);
response.setContentType("text/xml");
schema.write(response.getOutputStream());
return;
} else {
InputStream instream = service.getClassLoader()
.getResourceAsStream(DeploymentConstants.META_INF + "/" + schemaName);
if (instream != null) {
response.setStatus(HttpStatus.SC_OK);
response.setContentType("text/xml");
OutputStream outstream = response.getOutputStream();
boolean checkLength = true;
int length = Integer.MAX_VALUE;
int nextValue = instream.read();
if (checkLength) length--;
while (-1 != nextValue && length >= 0) {
outstream.write(nextValue);
nextValue = instream.read();
if (checkLength) length--;
}
outstream.flush();
return;
} else {
// no schema available by that name - send 404
response.sendError(HttpStatus.SC_NOT_FOUND, "Schema Not Found!");
return;
}
}
}
}
if (uri.indexOf("?wsdl2=") > 0) {
String serviceName =
uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("?wsdl2="));
if (processInternalWSDL(uri, configurationContext, serviceName, response)) return;
}
if (uri.indexOf("?wsdl=") > 0) {
String serviceName =
uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("?wsdl="));
if (processInternalWSDL(uri, configurationContext, serviceName, response)) return;
}
String contentType = null;
Header[] headers = request.getHeaders(HTTPConstants.HEADER_CONTENT_TYPE);
if (headers != null && headers.length > 0) {
contentType = headers[0].getValue();
int index = contentType.indexOf(';');
if (index > 0) {
contentType = contentType.substring(0, index);
}
}
// deal with GET request
pi = RESTUtil.processURLRequest(
msgContext,
response.getOutputStream(),
contentType);
} else if (method.equals(HTTPConstants.HEADER_POST)) {
// deal with POST request
String contentType = request.getContentType();
if (HTTPTransportUtils.isRESTRequest(contentType)) {
pi = RESTUtil.processXMLRequest(
msgContext,
request.getInputStream(),
response.getOutputStream(),
contentType);
} else {
String ip = (String)msgContext.getProperty(MessageContext.TRANSPORT_ADDR);
if (ip != null){
uri = ip + uri;
}
pi = HTTPTransportUtils.processHTTPPostRequest(
msgContext,
request.getInputStream(),
response.getOutputStream(),
contentType,
soapAction,
uri);
}
} else if (method.equals(HTTPConstants.HEADER_PUT)) {
String contentType = request.getContentType();
msgContext.setProperty(Constants.Configuration.CONTENT_TYPE, contentType);
pi = RESTUtil.processXMLRequest(
msgContext,
request.getInputStream(),
response.getOutputStream(),
contentType);
} else if (method.equals(HTTPConstants.HEADER_DELETE)) {
pi = RESTUtil.processURLRequest(
msgContext,
response.getOutputStream(),
null);
} else {
throw new MethodNotSupportedException(method + " method not supported");
}
Boolean holdResponse =
(Boolean) msgContext.getProperty(RequestResponseTransport.HOLD_RESPONSE);
if (pi.equals(InvocationResponse.SUSPEND) ||
(holdResponse != null && Boolean.TRUE.equals(holdResponse))) {
try {
((RequestResponseTransport) msgContext
.getProperty(RequestResponseTransport.TRANSPORT_CONTROL)).awaitResponse();
}
catch (InterruptedException e) {
throw new IOException("We were interrupted, so this may not function correctly:" +
e.getMessage());
}
}
// Finalize response
OperationContext operationContext = msgContext.getOperationContext();
Object isTwoChannel = null;
if (operationContext != null) {
isTwoChannel = operationContext.getProperty(Constants.DIFFERENT_EPR);
}
if (TransportUtils.isResponseWritten(msgContext)) {
if ((isTwoChannel != null) && Constants.VALUE_TRUE.equals(isTwoChannel)) {
response.setStatus(HttpStatus.SC_ACCEPTED);
}
} else {
response.setStatus(HttpStatus.SC_ACCEPTED);
}
}
private boolean processInternalWSDL(String uri, ConfigurationContext configurationContext, String serviceName, AxisHttpResponse response) throws IOException {
String wsdlName = uri.substring(uri.lastIndexOf("=") + 1);
HashMap services = configurationContext.getAxisConfiguration().getServices();
AxisService service = (AxisService) services.get(serviceName);
if (service != null) {
response.setStatus(HttpStatus.SC_OK);
response.setContentType("text/xml");
service.printUserWSDL(response.getOutputStream(), wsdlName);
response.getOutputStream().flush();
return true;
} else {
// no schema available by that name - send 404
response.sendError(HttpStatus.SC_NOT_FOUND, "Schema Not Found!");
return true;
}
}
public String getHost(AxisHttpRequest request) throws java.net.SocketException {
String host = null;
Header hostHeader = request.getFirstHeader("host");
if (hostHeader != null) {
String parts[] = hostHeader.getValue().split("[:]");
if (parts.length > 0) {
host = parts[0].trim();
}
}
return host;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?