01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */package org.apache.openejb.server.axis;
17:
18: import org.apache.axis.Handler;
19: import org.apache.axis.MessageContext;
20: import org.apache.axis.providers.java.RPCProvider;
21: import org.apache.openejb.server.httpd.HttpRequest;
22: import org.apache.openejb.server.webservices.WsConstants;
23:
24: import javax.xml.rpc.holders.IntHolder;
25: import java.lang.reflect.Method;
26:
27: public class PojoProvider extends RPCProvider {
28: public Object getServiceObject(MessageContext msgContext,
29: Handler service, String clsName, IntHolder scopeHolder)
30: throws Exception {
31: HttpRequest request = (HttpRequest) msgContext
32: .getProperty(AxisWsContainer.REQUEST);
33: return request.getAttribute(WsConstants.POJO_INSTANCE);
34: }
35:
36: protected Object invokeMethod(MessageContext msgContext,
37: Method interfaceMethod, Object pojo, Object[] arguments)
38: throws Exception {
39: Class pojoClass = pojo.getClass();
40:
41: Method pojoMethod = null;
42: try {
43: pojoMethod = pojoClass.getMethod(interfaceMethod.getName(),
44: interfaceMethod.getParameterTypes());
45: } catch (NoSuchMethodException e) {
46: throw (NoSuchMethodException) new NoSuchMethodException(
47: "The pojo class '"
48: + pojoClass.getName()
49: + "' does not have a method matching signature: "
50: + interfaceMethod).initCause(e);
51: }
52:
53: return pojoMethod.invoke(pojo, arguments);
54: }
55: }
|