| /* |
| * 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.ode.axis2.service; |
| |
| import org.apache.axiom.om.OMAbstractFactory; |
| import org.apache.axiom.om.OMElement; |
| import org.apache.axiom.om.OMFactory; |
| import org.apache.axiom.om.OMNamespace; |
| import org.apache.axis2.AxisFault; |
| import org.apache.axis2.addressing.EndpointReference; |
| import org.apache.axis2.client.Options; |
| import org.apache.axis2.client.ServiceClient; |
| import org.apache.ode.utils.Namespaces; |
| |
| import javax.xml.namespace.QName; |
| |
| /** |
| * Client utilities that can be used to invoke easily the deployment |
| * and management services with Axis2. |
| */ |
| public class ServiceClientUtil { |
| |
| /** |
| * Sends the provided message to an Axis2 deployed service. |
| * @param msg the message OMElement that will be included in the body |
| * @param url to send the message to |
| * @return the response message |
| * @throws AxisFault when a problem occured during the call |
| */ |
| public OMElement send(OMElement msg, String url) throws AxisFault { |
| return send(msg, url, Options.DEFAULT_TIMEOUT_MILLISECONDS); |
| } |
| |
| /** |
| * Sends the provided message to an Axis2 deployed service allowing to set a |
| * specific timeout (in ms). |
| * @param msg the message OMElement that will be included in the body |
| * @param url to send the message to |
| * @param timeout in milliseconds |
| * @return the response message |
| * @throws AxisFault when a problem occured during the call |
| */ |
| public OMElement send(OMElement msg, String url, long timeout) throws AxisFault { |
| Options options = new Options(); |
| EndpointReference target = new EndpointReference(url); |
| options.setTo(target); |
| options.setTimeOutInMilliSeconds(timeout); |
| |
| ServiceClient serviceClient = new ServiceClient(); |
| serviceClient.setOptions(options); |
| |
| return serviceClient.sendReceive(msg); |
| } |
| |
| /** |
| * Builds a message for the deployment and management API using simple parameter |
| * passing. Example: <br/> |
| * <code> |
| * buildMessage("listProcesses", new String[] {"filter", "orderKeys"}, |
| * new String[] {"name=DynPartnerResponder namespace=http://ode/bpel/responder " + |
| * "deployed>=" + notSoLongAgoStr, ""}); |
| * </code> |
| * @param operation to call |
| * @param params list of the parameters for the operation as defined in the WSDL document |
| * @param values of the parameters |
| * @return the message to send |
| */ |
| public OMElement buildMessage(String operation, String[] params, Object[] values) { |
| OMFactory _factory = OMAbstractFactory.getOMFactory(); |
| OMNamespace pmns = _factory.createOMNamespace(Namespaces.ODE_PMAPI, "pmapi"); |
| OMElement root = _factory.createOMElement(operation, pmns); |
| for (int m = 0; m < params.length; m++) { |
| OMElement omelmt = _factory.createOMElement(params[m], null); |
| if (values[m] == null) |
| omelmt.setText(""); |
| else if (values[m] instanceof String) |
| omelmt.setText((String) values[m]); |
| else if (values[m] instanceof QName) |
| omelmt.setText((QName) values[m]); |
| else if (values[m] instanceof OMElement) |
| omelmt.addChild((OMElement) values[m]); |
| else if (values[m] instanceof Object[]) { |
| Object[] subarr = (Object[]) values[m]; |
| String elmtName = (String) subarr[0]; |
| for (int p = 1; p < subarr.length; p++) { |
| OMElement omarrelmt = _factory.createOMElement(elmtName, null); |
| omarrelmt.setText(subarr[p].toString()); |
| omelmt.addChild(omarrelmt); |
| } |
| } else throw new UnsupportedOperationException("Type " + values[m].getClass() + "isn't supported as " + |
| "a parameter type (only String and QName are)."); |
| root.addChild(omelmt); |
| } |
| return root; |
| } |
| |
| } |