antelder 2002/12/02 05:26:21
Modified: java/src/org/apache/wsif/providers/soap/apacheaxis
WSIFPort_ApacheAxis.java
WSIFDynamicProvider_ApacheAxis.java
WSIFJmsTransport.java
Added: java/src/org/apache/wsif/providers/soap/apacheaxis
WSIFAXISConstants.java
Log:
Phase 2 of tidying up the AXIS provider
Revision Changes Path
1.19 +548 -704
xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFPort_ApacheAxis.java
Index: WSIFPort_ApacheAxis.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFPort_ApacheAxis.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- WSIFPort_ApacheAxis.java 19 Nov 2002 09:41:25 -0000 1.18
+++ WSIFPort_ApacheAxis.java 2 Dec 2002 13:26:20 -0000 1.19
@@ -63,29 +63,17 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Vector;
import javax.wsdl.Binding;
-import javax.wsdl.BindingFault;
-import javax.wsdl.BindingInput;
import javax.wsdl.BindingOperation;
-import javax.wsdl.BindingOutput;
import javax.wsdl.Definition;
import javax.wsdl.Input;
import javax.wsdl.Operation;
import javax.wsdl.Output;
import javax.wsdl.Port;
import javax.wsdl.PortType;
-import javax.wsdl.Service;
-import javax.wsdl.extensions.mime.MIMEContent;
-import javax.wsdl.extensions.mime.MIMEMimeXml;
-import javax.wsdl.extensions.mime.MIMEMultipartRelated;
-import javax.wsdl.extensions.mime.MIMEPart;
import javax.wsdl.extensions.soap.SOAPAddress;
import javax.wsdl.extensions.soap.SOAPBinding;
-import javax.wsdl.extensions.soap.SOAPBody;
-import javax.wsdl.extensions.soap.SOAPFault;
-import javax.wsdl.extensions.soap.SOAPHeader;
import javax.wsdl.extensions.soap.SOAPOperation;
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
@@ -99,14 +87,9 @@
import org.apache.wsif.logging.Trc;
import org.apache.wsif.providers.WSIFDynamicTypeMap;
import org.apache.wsif.util.WSIFProperties;
-import org.apache.wsif.util.WSIFUtils;
import org.apache.wsif.util.jms.WSIFJMSDestination;
import org.apache.wsif.util.jms.WSIFJMSFinder;
import org.apache.wsif.wsdl.extensions.jms.JMSAddress;
-import org.apache.wsif.wsdl.extensions.jms.JMSProperty;
-import org.apache.wsif.wsdl.extensions.jms.JMSPropertyValue;
-
-import com.ibm.wsdl.extensions.mime.MIMEConstants;
/**
* @author Mark Whitlock <[EMAIL PROTECTED]>
@@ -114,695 +97,556 @@
*/
public class WSIFPort_ApacheAxis extends WSIFDefaultPort {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 2L;
+
+ protected Definition definition;
+ protected Port port;
+ protected SOAPBinding soapBinding;
+ protected SOAPAddress soapAddress;
+ protected JMSAddress jmsAddress;
+
+ protected String bindingStyle;
+ protected URL endPointURL;
+ protected List jmsAddressPropVals;
+
+ protected WSIFDynamicTypeMap wsifdynamictypemap;
+ protected Map operationInstances;
+
+ transient protected Transport transport;
+ transient protected Call call;
+
+ private static final String HTTP_TRANSPORT_URI =
+ WSIFAXISConstants.HTTP_TRANSPORT_URI;
+ private static final String JMS_TRANSPORT_URI =
+ WSIFAXISConstants.JMS_TRANSPORT_URI;
+
+ /**
+ * Construct a new WSIFPort
+ */
+ public WSIFPort_ApacheAxis(
+ Definition definition,
+ Port port,
+ SOAPBinding soapBinding,
+ WSIFDynamicTypeMap wsifdynamictypemap)
+ throws WSIFException {
+ Trc.entry(this, definition, port, soapBinding, wsifdynamictypemap);
+
+ this.definition = definition;
+ this.port = port;
+ this.soapBinding = soapBinding;
+ this.wsifdynamictypemap = wsifdynamictypemap;
+
+ initializeSoapBinding();
+ initializeServiceAddress();
+ operationInstances = new HashMap();
+
+ if (Trc.ON)
+ Trc.exit(deep());
+ }
+
+ /**
+ * Gets the soap:binding WSDL element and validates its attributes
+ */
+ private void initializeSoapBinding() throws WSIFException {
+ this.bindingStyle = soapBinding.getStyle();
+ if (bindingStyle == null || bindingStyle.length() < 1) {
+ bindingStyle = WSIFAXISConstants.STYLE_DOCUMENT;
+ } else if (!WSIFAXISConstants.VALID_STYLES.contains(bindingStyle)) {
+ throw new WSIFException(
+ "unsupported style '"
+ + bindingStyle
+ + "' for binding:"
+ + soapBinding);
+ }
+
+ String transportURI = soapBinding.getTransportURI();
+ if (!WSIFAXISConstants.VALID_TRANSPORTS.contains(transportURI)) {
+ throw new WSIFException(
+ "unsupported transport '"
+ + transportURI
+ + "' for binding: "
+ + soapBinding);
+ }
+ }
+
+ /**
+ * Gets the soap:address or jms:address WSDL element from the service port
+ * and validates it against the binding transport.
+ */
+ private void initializeServiceAddress() throws WSIFException {
+ this.soapAddress =
+ (SOAPAddress) getExtElem(port,
+ SOAPAddress.class,
+ port.getExtensibilityElements());
+ this.jmsAddress =
+ (JMSAddress) getExtElem(port,
+ JMSAddress.class,
+ port.getExtensibilityElements());
+
+ if (soapAddress != null && jmsAddress != null)
+ throw new WSIFException(
+ "Both soap:address and jms:address cannot be specified
for port "
+ + port);
+
+ if (soapAddress == null && jmsAddress == null)
+ throw new WSIFException(
+ "Either soap:address or jms:address must be specified
for port "
+ + port);
+
+ if (isTransportHTTP() && soapAddress == null) {
+ throw new WSIFException(
+ "binding transport "
+ + HTTP_TRANSPORT_URI
+ + " requires soap:address for port "
+ + port);
+ }
+
+ if (isTransportJMS() && jmsAddress == null) {
+ throw new WSIFException(
+ "binding transport "
+ + JMS_TRANSPORT_URI
+ + " requires jms:address for port "
+ + port);
+ }
- protected Map operationInstances;
- protected Port port;
- protected Definition definition;
- protected URL url = null;
- protected int transportcode;
- protected Transport st;
- protected List jmsAddressPropVals = null;
- protected Call call;
- protected String style;
-
- private static final int HTTP_TRANSPORT = 1;
- private static final int JMS_TRANSPORT = 2;
- private static final int MQJMS_TRANSPORT = 3;
- private static final String CONTEXT_FACTORY = "contextFactory";
- private static final String PROVIDER_URL = "providerURL";
- private static final String FACTORY = "factory";
- private static final String REPLY_QUEUE = "replyQueue";
- private static final String HOST = "host";
- private static final String CHANNEL = "channel";
- private static final String PORT = "port";
- private static final String CCSID = "ccsid";
-
- public WSIFPort_ApacheAxis(
- Definition definition1,
- Service service,
- Port port1,
- WSIFDynamicTypeMap wsifdynamictypemap)
- throws WSIFException {
- Trc.entry(this, definition, service, port1, wsifdynamictypemap);
-
- operationInstances = new HashMap();
- setDefinition(definition1);
- setPort(port1);
-
- JMSAddress jmsaddress =
- (JMSAddress) getExtElem(port1,
- JMSAddress.class,
- port1.getExtensibilityElements());
- SOAPAddress soapaddress =
- (SOAPAddress) getExtElem(port1,
- SOAPAddress.class,
- port1.getExtensibilityElements());
-
- if (soapaddress != null && jmsaddress != null)
- throw new WSIFException(
- "Both soap:address and jms:address cannot be specified for port " +
port);
-
- if (soapaddress == null && jmsaddress == null)
- throw new WSIFException(
- "Either soap:address or jms:address must be specified for port " +
port);
-
- boolean isNotHTTP = false;
- if (soapaddress != null) {
- String s = soapaddress.getLocationURI();
- try {
- url = new URL(s);
- } catch (MalformedURLException malformedurlexception) {
- Trc.exception(malformedurlexception);
- throw new WSIFException(
- "could not set SOAP address to " + s,
- malformedurlexception);
- }
- } else {
- isNotHTTP = true;
- jmsAddressPropVals = jmsaddress.getJMSPropertyValues();
- }
-
- if (url == null && !isNotHTTP)
- throw new WSIFException(
- "soap:address with location URI is required for " + port1);
- String s1 = null;
- Binding binding = port1.getBinding();
- SOAPBinding soapbinding =
- (SOAPBinding) getExtElem(binding,
- javax.wsdl.extensions.soap.SOAPBinding.class,
- binding.getExtensibilityElements());
- if (soapbinding != null) {
- s1 = soapbinding.getStyle();
- if (!"rpc".equals(s1) && !"document".equals(s1))
- throw new WSIFException("unsupported style " + s1 + " for " +
soapbinding);
- String s2 = soapbinding.getTransportURI();
- if ("http://schemas.xmlsoap.org/soap/http".equals(s2)) {
- transportcode = HTTP_TRANSPORT;
- st = new HTTPTransport();
- } else if ("http://schemas.xmlsoap.org/soap/jms".equals(s2)) {
- transportcode = JMS_TRANSPORT;
- st = new WSIFJmsTransport();
- // HACK } else if
("http://schemas.xmlsoap.org/soap/mqjms".equals(s2)) {
- // HACK transportcode = MQJMS_TRANSPORT;
- // HACK st = new MQJMSTransport();
- } else {
- throw new WSIFException("unsupported transport " + s2 + " for " +
soapbinding);
- }
- }
-
- if (transportcode == JMS_TRANSPORT) {
- WSIFJMSDestination jmsDestination =
- new WSIFJMSDestination(
- WSIFJMSFinder.newFinder(jmsaddress,port.getName()),
- jmsaddress.getJmsProvDestName(),
- WSIFProperties.getSyncTimeout());
-
- ((WSIFJmsTransport) st).setDestination(jmsDestination);
- }
-
- if (s1 == null) {
- style = "document";
- } else {
- style = s1;
- }
- PortType porttype = binding.getPortType();
- List list = porttype.getOperations();
- Operation operation;
- WSIFOperation_ApacheAxis wsifoperation_apacheaxis;
- for (Iterator iterator = list.iterator();
- iterator.hasNext();
- setDynamicWSIFOperation(
- operation.getName(),
- operation.getInput().getName(),
- operation.getOutput() == null ? null :
operation.getOutput().getName(),
- wsifoperation_apacheaxis)) {
-
- operation = (Operation) iterator.next();
- String opName = operation.getName();
- Input input = operation.getInput();
- Output output = operation.getOutput();
- if (input == null)
- throw new WSIFException("missing input message for operation " +
opName);
- wsifoperation_apacheaxis =
- new WSIFOperation_ApacheAxis(this, operation, wsifdynamictypemap);
-
- if (jmsAddressPropVals!=null && jmsAddressPropVals.size()>0) {
- if (transportcode==JMS_TRANSPORT)
-
wsifoperation_apacheaxis.addInputJmsPropertyValues(jmsAddressPropVals);
- else throw new WSIFException("jms:propertyValue found in non-jms
address");
- }
-
- BindingOperation bindingoperation =
- WSIFUtils.getBindingOperation( binding, operation );
- if (bindingoperation == null)
- throw new WSIFException(
- "missing required in WSDL 1.1 binding operation for " + opName);
- SOAPOperation soapoperation =
- (SOAPOperation) getExtElem(bindingoperation,
- javax.wsdl.extensions.soap.SOAPOperation.class,
- bindingoperation.getExtensibilityElements());
- if (soapoperation == null)
- throw new WSIFException(
- "soapAction must be specified in required by WSDL 1.1
soap:operation binding for "
- + bindingoperation);
- String s4 = soapoperation.getSoapActionURI();
- wsifoperation_apacheaxis.setSoapActionURI(s4);
- String s5 = soapoperation.getStyle();
- if (s5 != null && !"rpc".equals(s5) && !"document".equals(s5))
- throw new WSIFException("unsupported style " + s1 + " for operation
" + opName);
- if (!"rpc".equals(s1) && !"document".equals(s1))
- throw new WSIFException(
- "default soap style must be rpc or document if operation "
- + opName
- + " binding has not style property");
- if (s5 != null) {
- style = s5;
- }
- QName bindingQN = binding.getQName();
- if (bindingQN != null) {
-
wsifoperation_apacheaxis.setInputNamespace(bindingQN.getNamespaceURI());
- }
- BindingInput bindinginput = bindingoperation.getBindingInput();
- List inExtElems = bindinginput.getExtensibilityElements();
- SOAPBody inSoapBody =
- (SOAPBody) getExtElem(bindinginput,
- javax.wsdl.extensions.soap.SOAPBody.class,
- inExtElems);
- if (inSoapBody != null) {
- List list2 =
- parseSoapBody(
- wsifoperation_apacheaxis,
- soapoperation,
- inSoapBody,
- true);
- wsifoperation_apacheaxis.setSoapPartNames(list2);
- }
-
- MIMEMultipartRelated inMimeMultipart =
- (MIMEMultipartRelated) getExtElem(bindinginput,
- MIMEMultipartRelated.class,
- inExtElems);
- if (inSoapBody != null && inMimeMultipart != null)
- throw new WSIFException(
- "In a binding operation that contains a mime:multipartRelated, "
- + "a soap:body was found that was not in a mime:part. "
- + "OperationName="
- + opName);
- if (inMimeMultipart != null)
- parseMimeMultipart(
- inMimeMultipart,
- bindingoperation,
- wsifoperation_apacheaxis,
- soapoperation,
- true,
- opName);
-
- MIMEMimeXml inMimeMimeXml =
- (MIMEMimeXml) getExtElem(bindinginput,
- MIMEMimeXml.class,
- inExtElems);
- if (inMimeMimeXml != null)
- throw new WSIFException(
- "WSIF does not support mime:mimeXml. Operation=" + opName);
-
- SOAPHeader soapheader =
- (SOAPHeader) getExtElem(bindinginput,
- javax.wsdl.extensions.soap.SOAPHeader.class,
- bindinginput.getExtensibilityElements());
- if (soapheader != null)
- throw new WSIFException("not supported input soap:header " +
soapheader);
-
- List inJmsProps =
- getExtElems(
- bindinginput,
- JMSProperty.class,
- bindinginput.getExtensibilityElements());
- if (inJmsProps != null && inJmsProps.size() > 0) {
- if (st instanceof WSIFJmsTransport)
- wsifoperation_apacheaxis.setInputJmsProperties(inJmsProps);
- else
- throw new WSIFException("jms:properties found in non-jms
binding");
- }
-
- List inJmsPropVals =
- getExtElems(bindinginput, JMSPropertyValue.class,
bindinginput.getExtensibilityElements());
- if (inJmsPropVals!=null && inJmsPropVals.size()>0) {
- if (st instanceof WSIFJmsTransport)
-
wsifoperation_apacheaxis.addInputJmsPropertyValues(inJmsPropVals);
- else throw new WSIFException("jms:propertyValue found in non-jms
binding");
- }
-
- BindingOutput bindingoutput = bindingoperation.getBindingOutput();
- if (bindingoutput != null) {
- List outExtElems = bindingoutput.getExtensibilityElements();
- SOAPBody outSoapBody =
- (SOAPBody) getExtElem(bindingoutput,
- javax.wsdl.extensions.soap.SOAPBody.class,
- outExtElems);
- if (outSoapBody != null) {
- List list3 =
- parseSoapBody(
- wsifoperation_apacheaxis,
- soapoperation,
- outSoapBody,
- false);
- if (list3 != null && list3.size() > 0)
- wsifoperation_apacheaxis.setReturnName((String)
list3.get(0));
- }
-
- MIMEMultipartRelated outMimeMultipart =
- (MIMEMultipartRelated) getExtElem(bindingoutput,
- MIMEMultipartRelated.class,
- outExtElems);
- if (outSoapBody != null && outMimeMultipart != null)
- throw new WSIFException(
- "In a binding operation that contains a
mime:multipartRelated, "
- + "a soap:body was found that was not in a mime:part. "
- + "OperationName="
- + opName);
- if (outMimeMultipart != null)
- parseMimeMultipart(
- outMimeMultipart,
- bindingoperation,
- wsifoperation_apacheaxis,
- soapoperation,
- false,
- opName);
-
- MIMEMimeXml outMimeMimeXml =
- (MIMEMimeXml) getExtElem(bindingoutput,
- MIMEMimeXml.class,
- outExtElems);
- if (outMimeMimeXml != null)
- throw new WSIFException(
- "WSIF does not support mime:mimeXml. Operation=" + opName);
-
- soapheader =
- (SOAPHeader) getExtElem(bindingoutput,
- javax.wsdl.extensions.soap.SOAPHeader.class,
- outExtElems);
- if (soapheader != null)
- throw new WSIFException("not supported output soap:header " +
soapheader);
- for (Iterator iterator1 =
- bindingoperation.getBindingFaults().values().iterator();
- iterator1.hasNext();
- ) {
- BindingFault bindingfault = (BindingFault) iterator1.next();
- SOAPFault soapfault =
- (SOAPFault) getExtElem(bindingfault,
- javax.wsdl.extensions.soap.SOAPFault.class,
- bindingfault.getExtensibilityElements());
- }
- List outJmsProps =
- getExtElems(
- bindingoutput,
- JMSProperty.class,
- outExtElems);
- if (outJmsProps != null && outJmsProps.size() > 0) {
- if (st instanceof WSIFJmsTransport)
-
wsifoperation_apacheaxis.setOutputJmsProperties(outJmsProps);
- else
- throw new WSIFException("jms:properties found in non-jms
binding");
- }
- }
-
- }
-
- if (Trc.ON)
- Trc.exit(deep());
- }
-
-
- private List parseSoapBody(
- WSIFOperation_ApacheAxis op,
- SOAPOperation soapoperation,
- SOAPBody soapbody,
- boolean isInput)
- throws WSIFException {
-
- Trc.entry(this, op, soapoperation, soapbody, new Boolean(isInput));
-
- if (isInput) {
- String ns = soapbody.getNamespaceURI();
- if (ns != null) {
- op.setInputNamespace(soapbody.getNamespaceURI());
- }
- }
-
- String use = soapbody.getUse();
- if (!"encoded".equals(use) && !"literal".equals(use))
- throw new WSIFException(
- "unsupported use " + use + " in " + soapoperation);
-
- if (isInput) {
- List list1 = soapbody.getEncodingStyles();
- if (list1 != null && list1.size() > 0)
- op.setInputEncodingStyle((String) list1.get(0));
- }
-
- List list2 = soapbody.getParts();
- Trc.exit(list2);
- return list2;
- }
-
- private void parseMimeMultipart(
- MIMEMultipartRelated mimeMultipart,
- BindingOperation bindingoperation,
- WSIFOperation_ApacheAxis wsifoperation_apacheaxis,
- SOAPOperation soapoperation,
- boolean isInput,
- String operationName)
- throws WSIFException {
-
- Trc.entry(
- this,
- mimeMultipart,
- bindingoperation,
- wsifoperation_apacheaxis,
- soapoperation);
-
- Vector mimePartNames = new Vector();
- boolean soapBodyFound = false;
- Operation op = bindingoperation.getOperation();
- Map mapInParts = op.getInput().getMessage().getParts();
- Map mapOutParts =
- op.getOutput() == null
- ? new HashMap()
- : op.getOutput().getMessage().getParts();
-
- List mimeParts = mimeMultipart.getMIMEParts();
- Iterator mimePartIt = mimeParts.iterator();
- while (mimePartIt.hasNext()) {
- Object nextMimePart = mimePartIt.next();
- if (nextMimePart instanceof MIMEPart) {
- MIMEPart mimePart = (MIMEPart) nextMimePart;
- if (!MIMEConstants
- .NS_URI_MIME
- .equals(mimePart.getElementType().getNamespaceURI()))
- throw new WSIFException(
- "A MIME part in binding operation "
- + bindingoperation.getName()
- + " did not have the correct namespace URI of "
- + MIMEConstants.NS_URI_MIME
- + ".");
-
- boolean containsSoapBody = false;
- boolean containsMimeContent = false;
- List mimePartChildren = mimePart.getExtensibilityElements();
- Iterator mimePartChildrenIt = mimePartChildren.iterator();
- while (mimePartChildrenIt.hasNext()) {
- Object nextChild = mimePartChildrenIt.next();
- if (nextChild instanceof MIMEContent) {
- MIMEContent mimeContent = (MIMEContent) nextChild;
- if (!MIMEConstants
- .NS_URI_MIME
- .equals(
- mimePart.getElementType().getNamespaceURI()))
- throw new WSIFException(
- "A MIME part in binding operation "
- + bindingoperation.getName()
- + " did not have the correct namespace URI of "
- + MIMEConstants.NS_URI_MIME
- + ".");
- containsMimeContent = true;
- if (containsSoapBody)
- throw new WSIFException(
- "A mime:part that contains a mime:content also "
- + "contains a soap:body. Operation="
- + operationName);
-
- String partName = mimeContent.getPart();
- if (partName == null || partName.length() == 0)
- throw new WSIFException(
- "No part name for a mime:content. Operation="
- + operationName);
-
- if ((isInput && mapInParts.get(partName) == null)
- || (!isInput && mapOutParts.get(partName) == null))
- throw new WSIFException(
- "The part specified in a mime:content does "
- + "not exist in the operation. Operation="
- + operationName
- + " Part="
- + partName);
-
- mimePartNames.addElement(partName);
-
- } else if (nextChild instanceof SOAPBody) {
- if (soapBodyFound)
- throw new WSIFException(
- "Multiple soap:body tags found in a "
- + "mime:multipartRelated. Operation="
- + operationName);
- soapBodyFound = true;
- containsSoapBody = true;
- if (containsMimeContent)
- throw new WSIFException(
- "A mime:part that contains a mime:content also "
- + "contains a soap:body. Operation="
- + operationName);
-
- List soapPartNameList =
- parseSoapBody(
- wsifoperation_apacheaxis,
- soapoperation,
- (SOAPBody) nextChild,
- isInput);
-
- if (isInput)
- wsifoperation_apacheaxis.setSoapPartNames(
- soapPartNameList);
- else if (
- soapPartNameList != null
- && soapPartNameList.size() > 0)
- wsifoperation_apacheaxis.setReturnName(
- (String) soapPartNameList.get(0));
- } else if (nextChild instanceof MIMEMultipartRelated) {
- throw new WSIFException(
- "WSIF does not support nesting mime:multipartRelated "
- + "inside a mime:part. Operation="
- + operationName);
- } else if (nextChild instanceof MIMEMimeXml) {
- throw new WSIFException(
- "WSIF does not support mime:mimeXml. Operation="
- + operationName);
- }
- }
- }
- }
-
- if (!soapBodyFound)
- throw new WSIFException(
- "No soap:body found in a mime:multipartRelated. Operation="
- + operationName);
-
- if (mimePartNames != null && !mimePartNames.isEmpty()) {
- List oldMimePartNames = wsifoperation_apacheaxis.getMimePartNames();
- if (oldMimePartNames == null || oldMimePartNames.isEmpty())
- wsifoperation_apacheaxis.setMimePartNames(mimePartNames);
- else
- oldMimePartNames.addAll(mimePartNames);
- }
-
- Trc.exit();
- }
-
- public Definition getDefinition() {
- Trc.entry(this);
- Trc.exit(definition);
- return definition;
- }
-
- public WSIFOperation_ApacheAxis getDynamicWSIFOperation(
- String name,
- String inputName,
- String outputName)
- throws WSIFException {
- Trc.entry(this, name, inputName, outputName);
-
- WSIFOperation_ApacheAxis tempOp =
- (WSIFOperation_ApacheAxis) operationInstances.get(
- getKey(name, inputName, outputName));
+ if (soapAddress != null) {
+ String s = soapAddress.getLocationURI();
+ if (s == null || s.length() < 1) {
+ throw new WSIFException(
+ "soap:address with location URI is required
for " + port);
+ }
+ try {
+ this.endPointURL = new URL(s);
+ } catch (MalformedURLException e) {
+ Trc.exception(e);
+ throw new WSIFException(
+ "exception setting SOAP address to "
+ + s
+ + ": "
+ + e.getLocalizedMessage(),
+ e);
+ }
+ } else {
+ this.jmsAddressPropVals = jmsAddress.getJMSPropertyValues();
+ }
+ }
+
+ /**
+ * Creates a WSIFOperation for the given operation name
+ * @return WSIFOperation the WSIFOperation
+ * @see WSIFOperation.createOperation
+ */
+ public WSIFOperation createOperation(String operationName)
+ throws WSIFException {
+ Trc.entry(this, operationName);
+ WSIFOperation wo = createOperation(operationName, null, null);
+ Trc.exit(wo);
+ return wo;
+ }
+
+ /**
+ * Creates a WSIFOperation for the given operation name
+ * @return WSIFOperation the WSIFOperation
+ * @see WSIFOperation.createOperation
+ */
+ public WSIFOperation createOperation(
+ String operationName,
+ String inputName,
+ String outputName)
+ throws WSIFException {
+ Trc.entry(this, operationName, inputName, outputName);
+
+ WSIFOperation_ApacheAxis op =
+ getDynamicWSIFOperation(operationName, inputName, outputName);
+ if (op == null) {
+ throw new WSIFException(
+ "Could not create operation: "
+ + operationName
+ + ":"
+ + inputName
+ + ":"
+ + outputName);
+ }
+ WSIFOperation wo = op.copy();
+ Trc.exit(wo);
+ return wo;
+ }
+
+ /**
+ * Closes the port.
+ * All methods are invalid after calling this method.
+ */
+ public void close() throws WSIFException {
+ Trc.entry(this);
+ if (transport != null && transport instanceof WSIFJmsTransport) {
+ ((WSIFJmsTransport) transport).close();
+ }
+ Trc.exit();
+ }
+
+ /**
+ * @deprecated replaced by getTransport
+ */
+ public Transport getAxisTransport() throws WSIFException {
+ Trc.entry(this);
+ Transport t = getTransport();
+ Trc.exit(t);
+ return t;
+ }
+
+ /**
+ * Gets the QName of the WSDL Binding
+ * @return QName the name of the Binding
+ */
+ public QName getBindingName() {
+ Trc.entry(this);
+ Binding binding = port.getBinding();
+ QName bindingQN = binding.getQName();
+ Trc.exit(bindingQN);
+ return bindingQN;
+ }
+
+ /**
+ * Returns the style attribute of this Binding.
+ * @return String the style attribute
+ */
+ public String getBindingStyle() {
+ Trc.entry(this);
+ Trc.exit(bindingStyle);
+ return bindingStyle;
+ }
+
+ /**
+ * Gets the AXIS Call object being used by this WSIFPort
+ * @return Call the AXIS Call object
+ */
+ public Call getCall() throws WSIFException {
+ Trc.entry(this);
+ if (call == null) {
+ Transport axistransport = getTransport();
+ java.net.URL url = getEndPoint();
+ try {
+ if (url != null) {
+ call = new Call(url);
+ if (axistransport != null) {
+ axistransport.setUrl(url.toString());
+ }
+ } else
+ call = new Call(new
org.apache.axis.client.Service());
+ } catch (JAXRPCException e) {
+ Trc.exception(e);
+ throw new WSIFException(
+ "exception creating call object: "
+ + e.getLocalizedMessage(),
+ e);
+ }
+ }
+ call.setMaintainSession(true);
+ Trc.exit(call);
+ return call;
+ }
+
+ /**
+ * Returns the Definition object for the WSDL file
+ * @return Definition the WSDL4J Definition object
+ */
+ public Definition getDefinition() {
+ Trc.entry(this);
+ Trc.exit(definition);
+ return definition;
+ }
+
+ /**
+ * @deprecated replaced by the createOperation methods
+ */ //TODO make this private or merge into createOp method
+ public WSIFOperation_ApacheAxis getDynamicWSIFOperation(
+ String name,
+ String inputName,
+ String outputName)
+ throws WSIFException {
+ Trc.entry(this, name, inputName, outputName);
+
+ WSIFOperation_ApacheAxis wsifOperation = null;
+
+ WSIFOperation_ApacheAxis tempOp =
+ (WSIFOperation_ApacheAxis) operationInstances.get(
+ getKey(name, inputName, outputName));
- WSIFOperation_ApacheAxis operation = null;
if (tempOp != null) {
- operation = tempOp.copy();
+ wsifOperation = tempOp.copy();
}
-
- if (operation == null) {
- BindingOperation bindingOperationModel =
- port.getBinding().getBindingOperation(name, inputName, outputName);
-
- if (bindingOperationModel != null) {
- // Only one operation matched in binding so find it in instances
- // from all the information that is available to us
- Iterator i = operationInstances.keySet().iterator();
- while (i.hasNext()) {
- String key = (String) i.next();
- if ((outputName != null && key.endsWith(outputName)) ||
outputName == null) {
- String start = (inputName == null) ? name + ":" : name +
":" + inputName;
- if (key.startsWith(start)) {
- if (operation != null) {
- // Duplicate operation found based on names!
- operation = null;
- break;
- }
- operation = (WSIFOperation_ApacheAxis)
operationInstances.get(key);
- }
- }
- }
- }
- }
- if (operation != null ) {
- operation.setStyle(style);
- }
-
- Trc.exit(operation);
- return operation;
- }
-
- public URL getEndPoint() {
- Trc.entry(this);
- Trc.exit(url);
- return url;
- }
-
- public Port getPort() {
- Trc.entry(this);
- Trc.exit(port);
- return port;
- }
-
- public Transport getAxisTransport() {
- Trc.entry(this);
- Trc.exit(st);
- return st;
- }
-
- public Call getCall() throws WSIFException {
- Trc.entry(this);
- if ( call == null ) {
- Transport axistransport = getAxisTransport();
- java.net.URL url = getEndPoint();
- try {
- if (url != null) {
- call = new Call(url);
- if (axistransport != null) {
- axistransport.setUrl(url.toString());
- }
- } else
- call = new Call( new org.apache.axis.client.Service() );
- } catch (JAXRPCException e) {
- Trc.exception(e);
- throw new WSIFException(e.toString());
- }
- }
- call.setMaintainSession(true);
- Trc.exit(call);
- return call;
- }
-
- public void setDefinition(Definition definition1) {
- Trc.entry(this, definition1);
- definition = definition1;
- Trc.exit();
- }
-
- public void setDynamicWSIFOperation(
- String s,
- String s1,
- String s2,
- WSIFOperation_ApacheAxis wsifoperation_apacheaxis) {
- Trc.entry(this, s, s1, s2, wsifoperation_apacheaxis);
- operationInstances.put(getKey(s, s1, s2), wsifoperation_apacheaxis);
- Trc.exit();
- }
-
- public WSIFOperation createOperation(String operationName)
- throws WSIFException {
- Trc.entry(this, operationName);
- WSIFOperation wo = createOperation(operationName, null, null);
- Trc.exit(wo);
- return wo;
- }
-
- public WSIFOperation createOperation(
- String operationName,
- String inputName,
- String outputName)
- throws WSIFException {
- Trc.entry(this, operationName, inputName, outputName);
-
- WSIFOperation_ApacheAxis op =
- getDynamicWSIFOperation(operationName, inputName, outputName);
- if (op == null) {
- throw new WSIFException(
- "Could not create operation: "
- + operationName
- + ":"
- + inputName
- + ":"
- + outputName);
- }
- WSIFOperation wo = op.copy();
- Trc.exit(wo);
- return wo;
- }
-
- public void setEndPoint(URL url1) {
- Trc.entry(this, url1);
- url = url1;
- Trc.exit();
- }
-
- public void setPort(Port port1) {
- Trc.entry(this, port1);
- port = port1;
- Trc.exit();
- }
-
- /**
- * Tests if this port supports asynchronous calls to operations.
- *
- * @return true if the port is using a JMS transport, otherwise false
- */
- public boolean supportsAsync() {
- Trc.entry(this);
- if (st != null && JMS_TRANSPORT == transportcode) {
- Trc.exit(true);
- return true;
- } else {
- Trc.exit(false);
- return false;
- }
- }
-
- /**
- * Closes the port. All methods are invalid after calling this method.
- */
- public void close() throws WSIFException {
- Trc.entry(this);
- if (st != null && st instanceof WSIFJmsTransport) {
- ((WSIFJmsTransport) st).close();
- }
- Trc.exit();
- }
-
- public String deep() {
- String buff = "";
- try {
- buff = new String(super.toString() + ":\n");
- buff += "operationInstances:" + operationInstances;
- buff += " port:" + port;
- buff += " definition:" + definition;
- buff += " url:" + url;
- buff += " transportcode:" + transportcode;
- buff += " st:" + st;
- buff += " jmsAddressPropVals:" + jmsAddressPropVals;
- } catch (Exception e) {
- Trc.exceptionInTrace(e);
- }
- return buff;
- }
+
+ if (wsifOperation == null) {
+ // TODO I don't really understand what this is doing
+ // TODO can't I delete all this now???
+ BindingOperation bindingOperationModel =
+ port.getBinding().getBindingOperation(
+ name,
+ inputName,
+ outputName);
+ if (bindingOperationModel != null) {
+ // Only one operation matched in binding so find it in
instances
+ // from all the information that is available to us
+ Iterator i = operationInstances.keySet().iterator();
+ while (i.hasNext()) {
+ String key = (String) i.next();
+ if ((outputName != null &&
key.endsWith(outputName))
+ || outputName == null) {
+ String start =
+ (inputName == null)
+ ? name + ":"
+ : name + ":" +
inputName;
+ if (key.startsWith(start)) {
+ if (wsifOperation != null) {
+ // Duplicate operation
found based on names!
+ wsifOperation = null;
+ break;
+ }
+ wsifOperation =
+ (
+
WSIFOperation_ApacheAxis) operationInstances
+ .get(
+ key);
+ }
+ }
+ }
+ }
+
+ Binding binding = port.getBinding();
+ PortType portType = binding.getPortType();
+ Operation operation =
+ portType.getOperation(name, inputName, outputName);
+ if (operation == null) {
+ throw new WSIFException(
+ "no operation found named " +
+ name + ", input:" + inputName + ", output:" +
outputName );
+ }
+ String opName = operation.getName();
+ Input input = operation.getInput();
+ Output output = operation.getOutput();
+ wsifOperation =
+ new WSIFOperation_ApacheAxis(
+ this,
+ operation,
+ wsifdynamictypemap);
+ operationInstances.put(
+ getKey(opName, inputName, outputName),
+ wsifOperation);
+ }
+
+ Trc.exit(wsifOperation);
+ return wsifOperation;
+ }
+
+ /**
+ * Returns the URL of the location attribute of the soap:address
+ * @return URL the URL of the service location
+ */
+ public URL getEndPoint() {
+ Trc.entry(this);
+ Trc.exit(endPointURL);
+ return endPointURL;
+ }
+
+ /**
+ * Wrapper to enable WSIFOperation to use the same WSIFDefaultPort method
+ * @see WSIFDefaultPort.getExtElem
+ */
+ public Object getExtElem(Object ctx, Class extType, List extElems)
+ throws WSIFException {
+ Trc.entry(this, ctx, extType, extElems);
+ Object o = super.getExtElem(ctx, extType, extElems);
+ Trc.exit(o);
+ return o;
+ }
+
+ /**
+ * Wrapper to enable WSIFOperation to use the same WSIFDefaultPort method
+ * @see WSIFDefaultPort.getExtElems
+ */
+ public List getExtElems(Object ctx, Class extType, List extElems)
+ throws WSIFException {
+ Trc.entry(this, ctx, extType, extElems);
+ List l = super.getExtElems(ctx, extType, extElems);
+ Trc.exit(l);
+ return l;
+ }
+
+ /**
+ * Returns any JMS propertyValue elements in the jms:address element
+ * @return List a List of the jms:propertyValue elements
+ */
+ public List getJmsAddressPropVals() {
+ Trc.entry(this);
+ Trc.exit(jmsAddressPropVals);
+ return jmsAddressPropVals;
+ }
+
+ /**
+ * Returns the WSDL Port object this WSIFPort represents
+ * @return Port the WSDL4J Port object
+ */
+ public Port getPort() {
+ Trc.entry(this);
+ Trc.exit(port);
+ return port;
+ }
+
+ /**
+ * Gets the soap:operation WSDL element for a BindingOperation
+ * @return SOAPOperation the soap:operation element
+ */
+ public SOAPOperation getSOAPOperation(BindingOperation bindingOp)
+ throws WSIFException {
+ Trc.entry(this, bindingOp);
+ SOAPOperation soapOperation =
+ (SOAPOperation) getExtElem(bindingOp,
+ javax.wsdl.extensions.soap.SOAPOperation.class,
+ bindingOp.getExtensibilityElements());
+ if (soapOperation == null)
+ throw new WSIFException(
+ "no soap:operation found in binding for: " +
bindingOp);
+ Trc.exit(soapOperation);
+ return soapOperation;
+ }
+
+ /**
+ * Gets the AXIS Transport object being used by this WSIFPort
+ * @return Transport the AXIS Transport object
+ */
+ public Transport getTransport() throws WSIFException {
+ Trc.entry(this);
+ if (transport == null) {
+ String s = soapBinding.getTransportURI();
+ if (HTTP_TRANSPORT_URI.equals(s)) {
+ transport = new HTTPTransport();
+ } else if (JMS_TRANSPORT_URI.equals(s)) {
+ WSIFJMSDestination jmsDestination =
+ new WSIFJMSDestination(
+ WSIFJMSFinder.newFinder(jmsAddress,
port.getName()),
+ jmsAddress.getJmsProvDestName(),
+ WSIFProperties.getSyncTimeout());
+ transport = new WSIFJmsTransport(jmsDestination);
+ }
+ }
+ Trc.exit(transport);
+ return transport;
+ }
+
+ /**
+ * Tests if an HTTP transport is being used
+ * @return boolean true if an HTTP transport is being used,
+ * otherwise false
+ */
+ public boolean isTransportHTTP() {
+ Trc.entry(this);
+ String transportURI = soapBinding.getTransportURI();
+ boolean httpTransport = HTTP_TRANSPORT_URI.equals(transportURI);
+ Trc.exit(httpTransport);
+ return httpTransport;
+ }
+
+ /**
+ * Tests if a JMS transport is being used
+ * @return boolean true if a JMS transport is being used,
+ * otherwise false
+ */
+ public boolean isTransportJMS() {
+ Trc.entry(this);
+ String transportURI = soapBinding.getTransportURI();
+ boolean jmsTransport = JMS_TRANSPORT_URI.equals(transportURI);
+ Trc.exit(jmsTransport);
+ return jmsTransport;
+ }
+
+ /**
+ * @deprecated should anyone be calling this?
+ */
+ public void setDefinition(Definition definition1) {
+ Trc.entry(this, definition1);
+ definition = definition1;
+ Trc.exit();
+ }
+
+ /**
+ * @deprecated should anyone be calling this?
+ */
+ public void setDynamicWSIFOperation(
+ String s,
+ String s1,
+ String s2,
+ WSIFOperation_ApacheAxis wsifoperation_apacheaxis) {
+ Trc.entry(this, s, s1, s2, wsifoperation_apacheaxis);
+ operationInstances.put(getKey(s, s1, s2), wsifoperation_apacheaxis);
+ Trc.exit();
+ }
+
+ /**
+ * @deprecated should anyone be calling this?
+ */
+ public void setEndPoint(URL url1) {
+ Trc.entry(this, url1);
+ endPointURL = url1;
+ Trc.exit();
+ }
+
+ /**
+ * @deprecated should anyone be calling this?
+ */
+ public void setPort(Port port1) {
+ Trc.entry(this, port1);
+ port = port1;
+ Trc.exit();
+ }
+
+ /**
+ * Tests if this port supports asynchronous calls to operations.
+ * @return true if the port is using a JMS transport, otherwise false
+ */
+ public boolean supportsAsync() {
+ Trc.entry(this);
+ if (isTransportJMS()) {
+ Trc.exit(true);
+ return true;
+ } else {
+ Trc.exit(false);
+ return false;
+ }
+ }
+
+ public String deep() {
+ StringBuffer buff = new StringBuffer();
+ try {
+ buff.append(new String(super.toString()));
+ buff.append(":\n");
+ buff.append(" port: ");
+ buff.append(port);
+ buff.append(" definition: ");
+ buff.append(definition);
+ buff.append(" soapbinding: ");
+ buff.append(soapBinding);
+ buff.append(" bindingStyle: ");
+ buff.append(bindingStyle);
+ buff.append(" soapAddress: ");
+ buff.append(soapAddress);
+ buff.append(" jmsAddress: ");
+ buff.append(jmsAddress);
+ buff.append(" service url: ");
+ buff.append(endPointURL);
+ buff.append(" jmsAddressPropVals: ");
+ buff.append(jmsAddressPropVals);
+ buff.append(" dynamicTypeMap: ");
+ buff.append(wsifdynamictypemap);
+ buff.append(" transport: ");
+ buff.append(transport);
+ buff.append(" call: ");
+ buff.append(call);
+ buff.append("operationInstances: ");
+ buff.append(operationInstances);
+ } catch (Exception e) {
+ Trc.exceptionInTrace(e);
+ }
+ return buff.toString();
+ }
+
}
1.7 +140 -136
xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFDynamicProvider_ApacheAxis.java
Index: WSIFDynamicProvider_ApacheAxis.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFDynamicProvider_ApacheAxis.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WSIFDynamicProvider_ApacheAxis.java 18 Sep 2002 15:38:20 -0000 1.6
+++ WSIFDynamicProvider_ApacheAxis.java 2 Dec 2002 13:26:21 -0000 1.7
@@ -59,9 +59,9 @@
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import java.util.Vector;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
@@ -81,140 +81,144 @@
* @author Ant Elder <[EMAIL PROTECTED]>
* @author Jeremy Hughes <[EMAIL PROTECTED]>
* @author Mark Whitlock <[EMAIL PROTECTED]>
-*/
+ */
public class WSIFDynamicProvider_ApacheAxis implements WSIFProvider {
- private static final String soap = "http://schemas.xmlsoap.org/wsdl/soap/";
- private static final String jms = "http://schemas.xmlsoap.org/wsdl/jms/";
- private static String[] bindings = new String[0];
- private static String[] addresses = new String[0];
- private static boolean setUpBindings = false;
- private static boolean setUpAddresses = false;
-
- public WSIFDynamicProvider_ApacheAxis() {
- Trc.entry(this);
- if (!setUpBindings) {
- setUpBindingNamespaceURIs();
- }
- if (!setUpAddresses) {
- setUpAddressNamespaceURIs();
- }
- WSIFServiceImpl.addExtensionRegistry(
- new org.apache.wsif.wsdl.extensions.jms.JMSExtensionRegistry());
- Trc.exit();
- }
-
- public WSIFPort createDynamicWSIFPort(
- Definition definition,
- Service service,
- Port port,
- WSIFDynamicTypeMap wsifdynamictypemap)
- throws WSIFException {
- Trc.entry(this, definition, service, port, wsifdynamictypemap);
- Binding binding = port.getBinding();
- List list = binding.getExtensibilityElements();
- for (Iterator iterator = list.iterator(); iterator.hasNext();) {
- Object obj = iterator.next();
- if (obj instanceof SOAPBinding) {
- WSIFPort wp =
- new WSIFPort_ApacheAxis(definition, service, port,
wsifdynamictypemap);
- Trc.exit(wp);
- return wp;
- }
- }
-
- Trc.exit(null);
- return null;
- }
-
- /**
- * Returns the WSDL namespace URIs of any bindings this provider supports.
- * @return an array of all binding namespaces supported by this provider
- */
- public String[] getBindingNamespaceURIs() {
- Trc.entry(this);
- Trc.exit(bindings);
- return bindings;
- }
-
- /**
- * Returns the WSDL namespace URIs of any port addresses this provider supports.
- * @return an array of all address namespaces supported by this provider
- */
- public String[] getAddressNamespaceURIs() {
- Trc.entry(this);
- Trc.exit(addresses);
- return addresses;
- }
-
- private void setUpBindingNamespaceURIs() {
- // check if the axis classes are available, if not then we cannot
- // support soap bindings!
- Class cls =
- (Class) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- return Class.forName(
- "org.apache.axis.AxisEngine",
- true,
- Thread.currentThread().getContextClassLoader());
- } catch (Throwable ignored) {
- Trc.ignoredException(ignored);
- }
- return null;
- }
- });
- if (cls != null) {
- bindings = new String[] { soap };
- }
- setUpBindings = true;
- }
-
- private void setUpAddressNamespaceURIs() {
- Vector v = new Vector();
- // check if the jms classes are available, if not then we cannot
- // support jms addresses!
- Class cls =
- (Class) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- return Class.forName(
- "javax.jms.Queue",
- true,
- Thread.currentThread().getContextClassLoader());
- } catch (Throwable ignored) {
- Trc.ignoredException(ignored);
- }
- return null;
- }
- });
- if (cls != null) {
- v.add(jms);
- }
-
- // check if the axis classes are available, if not then we cannot
- // support soap addresses!
- Class cls2 =
- (Class) AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- try {
- return Class.forName(
- "org.apache.axis.AxisEngine",
- true,
- Thread.currentThread().getContextClassLoader());
- } catch (Throwable ignored) {
- Trc.ignoredException(ignored);
- }
- return null;
- }
- });
- if (cls2 != null) {
- v.add(soap);
- }
- addresses = null;
- addresses = new String[v.size()];
- for (int i = 0; i < v.size(); i++) {
- addresses[i] = (String) v.elementAt(i);
- }
- setUpAddresses = true;
- }
+
+ private static final boolean axisAvailable = isAXISAvailable();
+ private static final boolean jmsAvailable = isJMSAvailable();
+ private static final String[] bindings = setUpBindingNamespaceURIs();
+ private static final String[] addresses = setUpAddressNamespaceURIs();
+
+ /**
+ * Construct a new AXIS provider
+ */
+ public WSIFDynamicProvider_ApacheAxis() {
+ Trc.entry(this);
+ if (axisAvailable && jmsAvailable) {
+ WSIFServiceImpl.addExtensionRegistry(
+ new
org.apache.wsif.wsdl.extensions.jms.JMSExtensionRegistry());
+ }
+ Trc.exit();
+ }
+
+ /**
+ * Create a new AXIS WSIFPort
+ * @see WSIFProvider.createDynamicWSIFPort
+ */
+ public WSIFPort createDynamicWSIFPort(
+ Definition definition,
+ Service service,
+ Port port,
+ WSIFDynamicTypeMap wsifdynamictypemap)
+ throws WSIFException {
+ Trc.entry(this, definition, service, port, wsifdynamictypemap);
+
+ Binding binding = port.getBinding();
+ List list = binding.getExtensibilityElements();
+
+ WSIFPort wp = null;
+ for (Iterator i = list.iterator();(i.hasNext() && wp == null);) {
+ Object o = i.next();
+ if (o instanceof SOAPBinding) {
+ wp = new WSIFPort_ApacheAxis(
+ definition,
+ port,
+ (SOAPBinding) o,
+ wsifdynamictypemap);
+ }
+ }
+
+ Trc.exit(wp);
+ return wp;
+ }
+
+ /**
+ * Returns the WSDL namespace URIs of any bindings this provider supports.
+ * @return an array of all binding namespaces supported by this provider
+ */
+ public String[] getBindingNamespaceURIs() {
+ Trc.entry(this);
+ Trc.exit(bindings);
+ return bindings;
+ }
+
+ /**
+ * Returns the WSDL namespace URIs of any port addresses this provider
supports.
+ * @return an array of all address namespaces supported by this provider
+ */
+ public String[] getAddressNamespaceURIs() {
+ Trc.entry(this);
+ Trc.exit(addresses);
+ return addresses;
+ }
+
+ /**
+ * Sets up the binding namespace URIs this provider supports.
+ */
+ private static String[] setUpBindingNamespaceURIs() {
+ String[] bindings;
+ if (axisAvailable) {
+ bindings =
+ new String[] {
WSIFAXISConstants.SOAP_BINDING_NAMESPACE };
+ } else {
+ bindings = new String[0];
+ }
+ Trc.event("available binding namespace URIs: ", bindings);
+ return bindings;
+ }
+
+ /**
+ * Sets up the address namespace URIs this provider supports.
+ */
+ private static String[] setUpAddressNamespaceURIs() {
+ ArrayList l = new ArrayList();
+ if (isAXISAvailable()) {
+ l.add(WSIFAXISConstants.SOAP_BINDING_NAMESPACE);
+ }
+ if (jmsAvailable) {
+ l.add(WSIFAXISConstants.JMS_TRANSPORT_URI);
+ }
+ String[] addresses = new String[l.size()];
+ for (int i = 0; i < l.size(); i++) {
+ addresses[i] = (String) l.get(i);
+ }
+ Trc.event("available address namespace URIs: ", addresses);
+ return addresses;
+ }
+
+ /**
+ * Checks if the axis.jar is available in the Java CLASSPATH
+ */
+ private static boolean isAXISAvailable() {
+ return isClassAvailable(WSIFAXISConstants.CLASS_IN_AXIS_JAR);
+ }
+
+ /**
+ * Checks if the JMS API jar is available in the Java CLASSPATH
+ */
+ private static boolean isJMSAvailable() {
+ return isClassAvailable(WSIFAXISConstants.CLASS_IN_JMS_JAR);
+ }
+
+ /**
+ * Checks if a class is available in the Java CLASSPATH
+ */
+ private static boolean isClassAvailable(final String className) {
+ Class c =
+ (Class) AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ try {
+ return Class.forName(
+ className,
+ true,
+
Thread.currentThread().getContextClassLoader());
+ } catch (Throwable ignored) {
+ Trc.ignoredException(ignored);
+ }
+ return null;
+ }
+ });
+ return c != null;
+ }
+
}
1.5 +13 -5
xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsTransport.java
Index: WSIFJmsTransport.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsTransport.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- WSIFJmsTransport.java 15 Nov 2002 09:31:57 -0000 1.4
+++ WSIFJmsTransport.java 2 Dec 2002 13:26:21 -0000 1.5
@@ -84,6 +84,13 @@
public static final String SYNC_TIMEOUT = "syncTimeout";
public static final String ASYNC_TIMEOUT = "asyncTimeout";
+ public WSIFJmsTransport(WSIFJMSDestination destination) throws WSIFException {
+ if (destination == null) {
+ throw new WSIFException("destination is null");
+ }
+ this.destination = destination;
+ }
+
public void setDestination(WSIFJMSDestination destination) {
Trc.entry(this, destination);
this.destination = destination;
@@ -163,10 +170,9 @@
Trc.exit();
}
- public WSIFJmsTransport copy() {
+ public WSIFJmsTransport copy() throws WSIFException {
Trc.entry(this);
- WSIFJmsTransport t = new WSIFJmsTransport();
- t.setDestination(destination);
+ WSIFJmsTransport t = new WSIFJmsTransport(destination);
t.setAsyncOperation(asyncOperation);
t.setWsifOperation(wsifOperation);
t.setSyncTimeout(syncTimeout);
@@ -178,9 +184,11 @@
public void close() throws WSIFException {
Trc.entry(this);
- if (destination != null) {
- destination.close();
+ if (destination == null) {
+ throw new WSIFException("already closed");
}
+ destination.close();
+ destination = null;
Trc.exit();
}
1.1
xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFAXISConstants.java
Index: WSIFAXISConstants.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "WSIF" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 2001, 2002, International
* Business Machines, Inc., http://www.apache.org. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.wsif.providers.soap.apacheaxis;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Various constants used by the WSIF AXIS provider classes
*
* @author Ant Elder <[EMAIL PROTECTED]>
*/
public class WSIFAXISConstants {
public static final String SOAP_BINDING_NAMESPACE =
"http://schemas.xmlsoap.org/wsdl/soap/";
public static final String HTTP_TRANSPORT_URI =
"http://schemas.xmlsoap.org/soap/http";
public static final String JMS_TRANSPORT_URI =
"http://schemas.xmlsoap.org/soap/jms";
public static final ArrayList VALID_TRANSPORTS =
new ArrayList(
Arrays.asList(
new String[] { HTTP_TRANSPORT_URI, JMS_TRANSPORT_URI
}));
public static final String CLASS_IN_AXIS_JAR = "org.apache.axis.AxisEngine";
public static final String CLASS_IN_JMS_JAR = "javax.jms.Queue";
public static final String DEFAULT_SOAP_ENCODING_URI =
"http://schemas.xmlsoap.org/soap/encoding/";
public static final String STYLE_RPC = "rpc";
public static final String STYLE_DOCUMENT = "document";
public static final ArrayList VALID_STYLES =
new ArrayList(
Arrays.asList(new String[] { STYLE_RPC, STYLE_DOCUMENT }));
public static final String USE_ENCODED = "encoded";
public static final String USE_LITERAL = "literal";
public static final ArrayList VALID_USES =
new ArrayList(
Arrays.asList(new String[] { USE_ENCODED, USE_LITERAL }));
public static final String AXIS_STYLE_MESSAGE = "message";
public static final String AXIS_STYLE_WRAPPED = "wrapped";
}