jmsutils.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 467 行 · 第 1/2 页
JAVA
467 行
/*
* 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.axis2.transport.jms;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.om.impl.builder.StAXBuilder;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.llom.OMTextImpl;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
import org.apache.axiom.attachments.ByteArrayDataSource;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.builder.BuilderUtil;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.util.JavaUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.namespace.QName;
import javax.activation.DataHandler;
import java.io.*;
import java.util.Hashtable;
import java.util.List;
import java.util.StringTokenizer;
public class JMSUtils {
private static final Log log = LogFactory.getLog(JMSUtils.class);
/**
* Should this service be enabled on JMS transport?
*
* @param service the Axis service
* @return true if JMS should be enabled
*/
public static boolean isJMSService(AxisService service) {
boolean process = service.isEnableAllTransports();
if (process) {
return true;
} else {
List transports = service.getExposedTransports();
for (int i = 0; i < transports.size(); i++) {
if (Constants.TRANSPORT_JMS.equals(transports.get(i))) {
return true;
}
}
}
return false;
}
/**
* Get the JMS destination used by this service
*
* @param service the Axis Service
* @return the name of the JMS destination
*/
public static String getDestination(AxisService service) {
Parameter destParam = service.getParameter(JMSConstants.DEST_PARAM);
// validate destination
String destination = null;
if (destParam != null) {
destination = (String) destParam.getValue();
} else {
destination = service.getName();
}
return destination;
}
/**
* Extract connection factory properties from a given URL
*
* @param url a JMS URL of the form jms:/<destination>?[<key>=<value>&]*
* @return a Hashtable of extracted properties
*/
public static Hashtable getProperties(String url) {
Hashtable h = new Hashtable();
int propPos = url.indexOf("?");
if (propPos != -1) {
StringTokenizer st = new StringTokenizer(url.substring(propPos + 1), "&");
while (st.hasMoreTokens()) {
String token = st.nextToken();
int sep = token.indexOf("=");
if (sep != -1) {
h.put(token.substring(0, sep), token.substring(sep + 1));
} else {
continue; // ignore, what else can we do?
}
}
}
return h;
}
/**
* Marks the given service as faulty with the given comment
*
* @param serviceName service name
* @param msg comment for being faulty
* @param axisCfg configuration context
*/
public static void markServiceAsFaulty(String serviceName, String msg,
AxisConfiguration axisCfg) {
if (serviceName != null) {
try {
AxisService service = axisCfg.getService(serviceName);
axisCfg.getFaultyServices().put(service.getName(), msg);
} catch (AxisFault axisFault) {
log.warn("Error marking service : " + serviceName +
" as faulty due to : " + msg, axisFault);
}
}
}
/**
* Get an InputStream to the message
*
* @param message the JMS message
* @return an InputStream
*/
public static InputStream getInputStream(Message message) {
try {
// get the incoming msg content into a byte array
if (message instanceof BytesMessage) {
byte[] buffer = new byte[8 * 1024];
ByteArrayOutputStream out = new ByteArrayOutputStream();
BytesMessage byteMsg = (BytesMessage) message;
for (int bytesRead = byteMsg.readBytes(buffer); bytesRead != -1;
bytesRead = byteMsg.readBytes(buffer)) {
out.write(buffer, 0, bytesRead);
}
return new ByteArrayInputStream(out.toByteArray());
} else if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
String contentType = message.getStringProperty(JMSConstants.CONTENT_TYPE);
if (contentType != null) {
return
new ByteArrayInputStream(
txtMsg.getText().getBytes(
BuilderUtil.getCharSetEncoding(contentType)));
} else {
return
new ByteArrayInputStream(txtMsg.getText().getBytes());
}
} else {
handleException("Unsupported JMS message type : " +
message.getClass().getName());
}
} catch (JMSException e) {
handleException("JMS Exception getting InputStream into message", e);
} catch (UnsupportedEncodingException e) {
handleException("Encoding exception getting InputStream into message", e);
}
return null;
}
/**
* Get a String property from the JMS message
*
* @param message JMS message
* @param property property name
* @return property value
*/
public static String getProperty(Message message, String property) {
try {
return message.getStringProperty(property);
} catch (JMSException e) {
return null;
}
}
/**
* Get the context type from the Axis MessageContext
*
* @param msgCtx message context
* @return the content type
*/
public static String getContentType(MessageContext msgCtx) {
OMOutputFormat format = new OMOutputFormat();
String soapActionString = getSOAPAction(msgCtx);
String charSetEnc = (String) msgCtx.getProperty(
Constants.Configuration.CHARACTER_SET_ENCODING);
if (charSetEnc != null) {
format.setCharSetEncoding(charSetEnc);
} else {
OperationContext opctx = msgCtx.getOperationContext();
if (opctx != null) {
charSetEnc = (String) opctx.getProperty(
Constants.Configuration.CHARACTER_SET_ENCODING);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?