You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ja...@apache.org on 2005/07/13 10:29:17 UTC
svn commit: r216126 - in
/webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client:
CallImpl.java ServiceFactoryImpl.java ServiceImpl.java
Author: jayachandra
Date: Wed Jul 13 01:29:16 2005
New Revision: 216126
URL: http://svn.apache.org/viewcvs?rev=216126&view=rev
Log:
More implementation into Call. Plz ignore the weird comments, if any. I've added them to help me in my coding later
Modified:
webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/CallImpl.java
webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceFactoryImpl.java
webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceImpl.java
Modified: webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/CallImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/CallImpl.java?rev=216126&r1=216125&r2=216126&view=diff
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/CallImpl.java (original)
+++ webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/CallImpl.java Wed Jul 13 01:29:16 2005
@@ -20,6 +20,10 @@
import java.util.List;
import java.util.Map;
import java.util.HashMap;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.BufferedOutputStream;
+import java.net.URI;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
@@ -29,9 +33,21 @@
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.soap.SOAPFaultException;
+import org.apache.axis2.om.OMAbstractFactory;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.OMFactory;
+import org.apache.axis2.om.OMNamespace;
+import org.apache.axis2.om.OMOutput;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.addressing.AddressingConstants;
+
/**
* @author sunja07
- *
+ * Class CallImpl
+ * <documentation> to be completed </documentation>
+ *
+ * Forget not that Call instance is MUTABLE. i.e. the configuration of call
+ * instance can be changed and it can be re-used for some other need.
*/
public class CallImpl extends BindingProviderImpl implements javax.xml.rpc.Call {
@@ -57,7 +73,13 @@
* Field returnType
* The xml return type to expect from the method invocation
*/
- private static QName returnType;
+ private QName returnType;
+
+ /**
+ * Field returnTypeClass
+ * The java class into which return value will be stuffed.
+ */
+ private Class returnTypeClass;
/**
* Field paramAndReturnSpecRequired
@@ -65,7 +87,7 @@
* the operation corresponding to this Call object has to have the
* parameters added explicitly and return type specified explicitly
*/
- protected static boolean paramAndReturnSpecRequired;
+ protected static boolean paramAndReturnSpecRequired=false;
/**
* Field propertyBag
@@ -83,6 +105,10 @@
private static HashMap outputParams = new HashMap();
/**
+ * Field service object from which this call instance is created.
+ */
+ private transient ServiceImpl service;
+ /**
*
*/
public CallImpl() {
@@ -163,6 +189,10 @@
UnsupportedOperationException, JAXRPCException {
// TODO Auto-generated method stub
+ //don't know about rest of the impl. But at least, adding parameter
+ //would override the default false value of paramAndSpecRequired to true
+ paramAndReturnSpecRequired = true;
+
}
/**
@@ -188,9 +218,39 @@
*/
public void setReturnType(QName xmlType) throws JAXRPCException,
IllegalArgumentException, UnsupportedOperationException {
- // TODO Auto-generated method stub
+ if(operationName==null) {
+ throw new JAXRPCException("Can't set returnType. Try setting the " +
+ "operationName prior to calling setReturnType");
+ }
+ if(isParameterAndReturnSpecRequired(operationName)==false) {
+ throw new JAXRPCException("Call instance is configured not to " +
+ "specify Parameter and ReturnType");
+ }
+
+ //TODO identify if the QName is valid, if not, throw IllegalArgumentException
+ this.returnType = xmlType;
+ if(service.isJAXB_USAGE()){
+ Class jaxbBindedObjectClass = getJAXBObjectClassForQName(xmlType);
+ returnTypeClass = jaxbBindedObjectClass;
+ }
+ else { //no JAXB_USAGE, so try getting things from registered TypeMapping
+ //TODO get the java type mapped to this xmlType QName and set it as the
+ //returnTypeClass
+
+ //come to think of this, we don't need to identify the mapped javaType
+ //and set the returnTypeClass with it. Actually in the invoke method itself
+ //we will get hold of the corresponding deserializer and ask it to
+ //prepare the object out of the response OMElement. How does that sound!?!
+
+ }
}
+
+ //This can be a utils class method
+ public Class getJAXBObjectClassForQName(QName xmlType) {
+ //This is a black box for now
+ return Object.class;
+ }
/**
* Method setReturnType
@@ -210,8 +270,39 @@
public void setReturnType(QName xmlType, Class javaType)
throws UnsupportedOperationException, IllegalArgumentException,
JAXRPCException {
- // TODO Auto-generated method stub
-
+ if(operationName==null) {
+ throw new JAXRPCException("Can't set returnType. Try setting the " +
+ "operationName prior to calling setReturnType");
+ }
+ if(isParameterAndReturnSpecRequired(operationName)==false) {
+ throw new JAXRPCException("Call instance is configured not to " +
+ "specify Parameter and ReturnType");
+ }
+
+ //TODO identify if the QName is valid, if not, throw IllegalArgumentException
+
+ this.returnType = xmlType;
+
+ if(service.isJAXB_USAGE()) { //JAXB is used
+ //check if the JAXB bound class is compatible with the javaType
+ //class mentioned here. If not throw JAXRPCException
+ Class jaxbBindedJavaClass = getJAXBObjectClassForQName(xmlType);
+ if(javaType.isAssignableFrom(jaxbBindedJavaClass)) {
+ this.returnTypeClass = javaType;
+ }
+ else
+ throw new JAXRPCException("Set return type java class can't be cast " +
+ "from underlying JAXB databinding object");
+ }
+ else {//no JAXB.
+ //check if the typeMapping has a registration for this xmlType
+ //and javaType pair. If not, throw JAXRPCException
+ if(!service.getTypeMappingRegistry().
+ getTypeMapping(ENCODINGSTYLE_URI_PROPERTY).
+ isRegistered(javaType,xmlType))
+ throw new JAXRPCException("Invalid javaType for xmlType. " +
+ "Underlying type mapping has no corresponding pair registered");
+ }
}
/**
@@ -375,6 +466,39 @@
public Object invoke(Object[] inputParams) throws RemoteException,
SOAPFaultException, JAXRPCException {
+ //check if the call instance is properly configured. If not throw
+ //a JAXRPCException.
+
+ //I'll try to create an OMElement that would wrap the input params
+ //and use that to invoke the invokeBlocking() method of Axis2's call
+ //implementation.
+ //I'm not sure if the way I wrap the contents into an OMElement should
+ //keep track of any properties set on the call object viz. style and
+ //use. For now am just wrapping each element as a child in the method
+ //element
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ String operationNS = operationName.getNamespaceURI();
+ OMNamespace omNS = (operationNS == null || operationNS == "")? fac.createOMNamespace("http://jaxwsforaxis2.org","ns1"): fac.createOMNamespace(operationNS, "ns1");
+ OMElement methodElement = fac.createOMElement(operationName.getLocalPart(),omNS);
+ for(int i=0; i<inputParams.length;i++) {
+ OMElement paramElement = fac.createOMElement("param"+String.valueOf(i),omNS);
+ paramElement.addChild(fac.createText(inputParams[i].toString()));
+ methodElement.addChild(paramElement);
+ }
+
+ org.apache.axis2.clientapi.Call axis2Call = new org.apache.axis2.clientapi.Call();
+ axis2Call.setTo(new EndpointReference(AddressingConstants.WSA_TO,"http://localhost:9090/axis/services/Echo"));
+ OMElement response = axis2Call.invokeBlocking(operationName.getLocalPart(),methodElement);
+
+ //Now the job of extracting the return value out of the OMElement and
+ //populating it into the ReturnType.
+ //As 'response' we already get the contents of soap body.
+ OMElement returnValue = response.getFirstElement();
+ //corresponding to the returnType set, we should get a java object
+ //instantiated and fill in the contents into the datamembers and return
+ //that object
+ Object returnObject = getReturnObject(returnType);
+
// ---
// some solid code will have to go here
// ---
@@ -388,10 +512,20 @@
outputParams.clear();
//populateOutputParams(operationName); // a private method to be coded
- // TODO Auto-generated method stub
- return null;
+ //Returning the request OMElement only for testing purposes
+ return response;
+
+ }
+
+ public Object getReturnObject(QName returnType) {
+ //if there has been a class registered associated with this QName
+ //return that class
+ if (returnTypeClass != null) {
+ //Object returnObject =
+ }
+ return null;
}
/**
@@ -414,6 +548,9 @@
public Object invoke(QName operationName, Object[] inputParams)
throws RemoteException {
+ //check if the call instance is properly configured. If not throw
+ //a JAXRPCException.
+
//---
// some solid code will have to go here
// ---
@@ -471,6 +608,20 @@
*/
public List getOutputValues() throws JAXRPCException {
return (List)outputParams.values();
+ }
+
+ /**
+ * @return Returns the service.
+ */
+ public ServiceImpl getService() {
+ return service;
+ }
+
+ /**
+ * @param service The service to set.
+ */
+ public void setService(ServiceImpl service) {
+ this.service = service;
}
}
Modified: webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceFactoryImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceFactoryImpl.java?rev=216126&r1=216125&r2=216126&view=diff
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceFactoryImpl.java (original)
+++ webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceFactoryImpl.java Wed Jul 13 01:29:16 2005
@@ -32,7 +32,11 @@
@Override
public Service createService(URL wsdlDocumentLocation, QName serviceName)
throws ServiceException {
-
+ return createService(wsdlDocumentLocation, serviceName, true);
+ }
+
+ public Service createService(URL wsdlDocumentLocation, QName serviceName, boolean jaxbUsage)
+ throws ServiceException {
if(parserWrapper==null) {
//Here am hard coding the parser choice. Should think of better
//flexible implementation
@@ -40,7 +44,7 @@
}
javax.wsdl.Service wsdlService = parserWrapper.getService(wsdlDocumentLocation, serviceName);
- service = (Service) new ServiceImpl(parserWrapper, wsdlService);
+ service = (Service) new ServiceImpl(parserWrapper, wsdlService, jaxbUsage);
return service;
}
Modified: webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceImpl.java?rev=216126&r1=216125&r2=216126&view=diff
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceImpl.java (original)
+++ webservices/axis/trunk/archive/java/scratch/ashu_jaya_venkat/jaxws/src/org/apache/axis/jaxrpc/client/ServiceImpl.java Wed Jul 13 01:29:16 2005
@@ -56,7 +56,7 @@
private TypeMappingRegistry typeMappingRegistry;
- public static boolean JAXB_USAGE = true;
+ public boolean JAXB_USAGE = true;
public String wsdlLoc = null;
@@ -74,6 +74,7 @@
*/
public Call createCall() throws ServiceException {
Call call = new CallImpl();
+ ((CallImpl)call).setService(this);
return call;
}
@@ -558,8 +559,7 @@
*/
public SecurityConfiguration getSecurityConfiguration() throws
UnsupportedOperationException {
- // TODO Auto-generated method stub
- return null;
+ throw new UnsupportedOperationException();
}
/**
@@ -623,19 +623,26 @@
this.parserWrapper = parserWrap;
this.wsdlService = wsdlSvc;
}
+
+ public ServiceImpl(JAXRPCWSDLInterface parserWrap, Service wsdlSvc, boolean jaxbUsage) {
+ super();
+ this.parserWrapper = parserWrap;
+ this.wsdlService = wsdlSvc;
+ this.JAXB_USAGE = jaxbUsage;
+ }
/**
* @return Returns the JAXB_USAGE.
*/
- public static boolean isJAXB_USAGE() {
- return JAXB_USAGE;
+ public boolean isJAXB_USAGE() {
+ return this.JAXB_USAGE;
}
/**
* @param jaxb_usage The JAXB_USAGE to set.
*/
- public static void setJAXB_USAGE(boolean jaxb_usage) {
- JAXB_USAGE = jaxb_usage;
+ public void setJAXB_USAGE(boolean jaxb_usage) {
+ this.JAXB_USAGE = jaxb_usage;
}
}