transportutils.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 512 行 · 第 1/2 页
JAVA
512 行
throw new AxisFault(Messages.getMessage("outMessageNull"));
}
}
/**
* Initial work for a builder selector which selects the builder for a given message format based on the the content type of the recieved message.
* content-type to builder mapping can be specified through the Axis2.xml.
*
* @param msgContext
* @return the builder registered against the given content-type
* @throws AxisFault
*/
public static MessageFormatter getMessageFormatter(MessageContext msgContext)
throws AxisFault {
MessageFormatter messageFormatter = null;
String messageFormatString = getMessageFormatterProperty(msgContext);
if (messageFormatString != null) {
messageFormatter = msgContext.getConfigurationContext()
.getAxisConfiguration().getMessageFormatter(messageFormatString);
}
if (messageFormatter == null) {
// If we are doing rest better default to Application/xml formatter
if (msgContext.isDoingREST()) {
String httpMethod = (String) msgContext.getProperty(Constants.Configuration.HTTP_METHOD);
if (Constants.Configuration.HTTP_METHOD_GET.equals(httpMethod) ||
Constants.Configuration.HTTP_METHOD_DELETE.equals(httpMethod)) {
return new XFormURLEncodedFormatter();
}
return new ApplicationXMLFormatter();
} else {
// Lets default to SOAP formatter
//TODO need to improve this to use the stateless nature
messageFormatter = new SOAPMessageFormatter();
}
}
return messageFormatter;
}
/**
* @param contentType The contentType of the incoming message. It may be null
* @param defaultSOAPNamespace Usually set the version that is expected. This a fallback if the contentType is unavailable or
* does not match our expectations
* @return null or the soap namespace. A null indicates that the message will be interpretted as a non-SOAP (i.e. REST) message
*/
private static String getSOAPNamespaceFromContentType(String contentType,
String defaultSOAPNamespace) {
String returnNS = defaultSOAPNamespace;
// Discriminate using the content Type
if (contentType != null) {
/*
* SOAP11 content-type is "text/xml"
* SOAP12 content-type is "application/soap+xml"
*
* What about other content-types?
*
* TODO: I'm not fully convinced this method is complete, given the media types
* listed in HTTPConstants. Should we assume all application/* is SOAP12?
* Should we assume all text/* is SOAP11?
*
* So, we'll follow this pattern:
* 1) find the content-type main setting
* 2) if (1) not understood, find the "type=" param
* Thilina: I merged (1) & (2)
*/
if (JavaUtils.indexOfIgnoreCase(contentType, SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1)
{
returnNS = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
}
// search for "type=text/xml"
else
if (JavaUtils.indexOfIgnoreCase(contentType, SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1)
{
returnNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
}
}
if (returnNS == null) {
if (log.isDebugEnabled()) {
log.debug("No content-type or \"type=\" parameter was found in the content-type " +
"header and no default was specified, thus defaulting to SOAP 1.1.");
}
returnNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
}
if (log.isDebugEnabled()) {
log.debug("content-type: " + contentType);
log.debug("defaultSOAPNamespace: " + defaultSOAPNamespace);
log.debug("Returned namespace: " + returnNS);
}
return returnNS;
}
public static void processContentTypeForAction(String contentType, MessageContext msgContext) {
//Check for action header and set it in as soapAction in MessageContext
int index = contentType.indexOf("action");
if (index > -1) {
String transientString = contentType.substring(index, contentType.length());
int equal = transientString.indexOf("=");
int firstSemiColon = transientString.indexOf(";");
String soapAction; // This will contain "" in the string
if (firstSemiColon > -1) {
soapAction = transientString.substring(equal + 1, firstSemiColon);
} else {
soapAction = transientString.substring(equal + 1, transientString.length());
}
if ((soapAction != null) && soapAction.startsWith("\"")
&& soapAction.endsWith("\"")) {
soapAction = soapAction
.substring(1, soapAction.length() - 1);
}
msgContext.setSoapAction(soapAction);
}
}
private static String getMessageFormatterProperty(MessageContext msgContext) {
String messageFormatterProperty = null;
Object property = msgContext
.getProperty(Constants.Configuration.MESSAGE_TYPE);
if (property != null) {
messageFormatterProperty = (String) property;
}
if (messageFormatterProperty == null) {
Parameter parameter = msgContext
.getParameter(Constants.Configuration.MESSAGE_TYPE);
if (parameter != null) {
messageFormatterProperty = (String) parameter.getValue();
}
}
return messageFormatterProperty;
}
/**
* This is a helper method to get the response written flag from the RequestResponseTransport
* instance.
*/
public static boolean isResponseWritten(MessageContext messageContext) {
RequestResponseTransport reqResTransport = getRequestResponseTransport(messageContext);
if (reqResTransport != null) {
if (log.isDebugEnabled()) {
log.debug("Found RequestResponseTransport returning isResponseWritten()");
}
return reqResTransport.isResponseWritten();
} else {
if (log.isDebugEnabled()) {
log.debug("Did not find RequestResponseTransport returning false from get"
+ "ResponseWritten()");
}
return false;
}
}
/**
* This is a helper method to set the response written flag on the RequestResponseTransport
* instance.
*/
public static void setResponseWritten(MessageContext messageContext, boolean responseWritten) {
RequestResponseTransport reqResTransport = getRequestResponseTransport(messageContext);
if (reqResTransport != null) {
if (log.isDebugEnabled()) {
log.debug("Found RequestResponseTransport setting response written");
}
reqResTransport.setResponseWritten(responseWritten);
} else {
if (log.isDebugEnabled()) {
log.debug("Did not find RequestResponseTransport cannot set response written");
}
}
}
/**
* This is an internal helper method to retrieve the RequestResponseTransport instance
* from the MessageContext object. The MessageContext may be the response MessageContext so
* in that case we will have to retrieve the request MessageContext from the OperationContext.
*/
private static RequestResponseTransport getRequestResponseTransport(MessageContext messageContext) {
try {
// If this is the request MessageContext we should find it directly by the getProperty()
// method
if (messageContext.getProperty(RequestResponseTransport.TRANSPORT_CONTROL)
!= null) {
return (RequestResponseTransport) messageContext.getProperty(
RequestResponseTransport.TRANSPORT_CONTROL);
}
// If this is the response MessageContext we need to look for the request MessageContext
else if (messageContext.getOperationContext() != null
&& messageContext.getOperationContext()
.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE) != null) {
return (RequestResponseTransport) messageContext.
getOperationContext().getMessageContext(
WSDLConstants.MESSAGE_LABEL_IN_VALUE).getProperty(
RequestResponseTransport.TRANSPORT_CONTROL);
}
else {
return null;
}
}
catch(AxisFault af) {
// probably should not be fatal, so just log the message
String msg = Messages.getMessage("getMessageContextError", af.toString());
log.debug(msg);
return null;
}
}
/**
* Clean up cached attachment file
* @param msgContext
*/
public static void deleteAttachments(MessageContext msgContext) {
if (log.isDebugEnabled()) {
log.debug("Entering deleteAttachments()");
}
Attachments attachments = msgContext.getAttachmentMap();
if (attachments != null) {
String [] keys = attachments.getAllContentIDs();
if (keys != null) {
String key = null;
File file = null;
DataSource dataSource = null;
for (int i = 0; i < keys.length; i++) {
try {
key = keys[i];
dataSource = attachments.getDataHandler(key).getDataSource();
if(dataSource instanceof CachedFileDataSource){
file = ((CachedFileDataSource)dataSource).getFile();
if (log.isDebugEnabled()) {
log.debug("Delete cache attachment file: "+file.getName());
}
file.delete();
}
}
catch (Exception e) {
if (file != null) {
file.deleteOnExit();
}
}
}
}
}
if (log.isDebugEnabled()) {
log.debug("Exiting deleteAttachments()");
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?