You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by gunsnroz <gu...@hotmail.com> on 2004/02/19 19:39:00 UTC

duplicate code in EWS and AXIS

Hi, ews and axis people!

After comparing the codes in EWS and AXIS, I found that many of them are
duplicated.
Specially, the following codes are very similar.

  - J2eeEmitter <--> org.apache.axis.wsdl.tojava.Emitter
  - J2eeGeneratorFactory <-->
org.apache.axis.wsdl.tojava.JavaGeneratorFactory

The other codes such as J2eexxxWriter are deprecated in EWS because the
equivalent ones in Axis 
can be used. Like this, some modification in the axis Emitter and
JavaGeneratorFactory
makes the Axis code reusable and ews code simpler.

The basic idea is adding some codes that override the Axis' default Java
<--> wsdl nampping in derived classes.
Here is the example, (details omitted for brevity)

JavaGeneratorFactory.java from Axis

protected void determineInterfaceName(SymbolTable symbolTable) {
	// ...
	if (entry instanceof BindingEntry) {

		PortTypeEntry = ...
		seiName = ptEntry.getName();
		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
seiName);
	}
	// ...
}

If we add some way to override Axis' default name mapping (ptEntry.getName()
in above example) like this:


///////////////////// JavaGeneratorFactory in Axis
protected void determineInterfaceName(SymbolTable symbolTable) {
	// ...
	if (entry instanceof BindingEntry) {

		PortTypeEntry = ...
		seiName = getServiceEndpointInterfaceJavaNameHook(ptEntry,
bEntry);
		if (seiName == null) {
			seiName = ptEntry.getName();
		}
		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
seiName);
	}
	// ...
}	

protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
ptEntry, BindingEntry bEntry) {
	return null;
}

The J2eeGeneratorFactory in ews look like this:

/////////////////////// J2eeGeneratorFactory in EWS

class J2eeGeneratorFactory extends
org.apache.axis.wsdl.tojava.JavaGeneratorFactory {
// determinedInterfaceName() : no more needed.

// add new method
protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
ptEntry, BindingEntry bEntry) {
	if (mapper == null)
		return null;
	return mapper.getServiceEndpointInterfaceName(ptEntry, bEntry);
}
// ...
}

I have modified the codes in ews and axis and 
it seems that almost duplicate codes in J2eeEmitter and J2eeGeneratorFactory
can be removed.

Uhm... I think there are pros and cons in this way.
The cons:
  - Tightly coupling in the Axis code and ews (or other) codes
 
The pros:
  - Simpler ews codes
  - The Axis code can be reused in other Java <--> WSDL mapping case (like
JSR-181)

I will discuss it more with Ias who is the Axis and ews committer. (He and I
are working in the same company)
I think that the code change in Axis like this should be with the consent of
other Axis committers.

Any comment?

Jongjin/

---------------------------------------------------
Webservices Team in Tmax Soft.
JSR-208 EG member.
---------------------------------------------------

Re: duplicate code in EWS and AXIS

Posted by Davanum Srinivas <di...@yahoo.com>.
Jongjin,

Am all for it. Please open a bug report with the "cvs diff -u" before Ias commits the code to the
Axis code base.

thanks,
dims

--- gunsnroz <gu...@hotmail.com> wrote:
> Hi, ews and axis people!
> 
> After comparing the codes in EWS and AXIS, I found that many of them are
> duplicated.
> Specially, the following codes are very similar.
> 
>   - J2eeEmitter <--> org.apache.axis.wsdl.tojava.Emitter
>   - J2eeGeneratorFactory <-->
> org.apache.axis.wsdl.tojava.JavaGeneratorFactory
> 
> The other codes such as J2eexxxWriter are deprecated in EWS because the
> equivalent ones in Axis 
> can be used. Like this, some modification in the axis Emitter and
> JavaGeneratorFactory
> makes the Axis code reusable and ews code simpler.
> 
> The basic idea is adding some codes that override the Axis' default Java
> <--> wsdl nampping in derived classes.
> Here is the example, (details omitted for brevity)
> 
> JavaGeneratorFactory.java from Axis
> 
> protected void determineInterfaceName(SymbolTable symbolTable) {
> 	// ...
> 	if (entry instanceof BindingEntry) {
> 
> 		PortTypeEntry = ...
> 		seiName = ptEntry.getName();
> 		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
> seiName);
> 	}
> 	// ...
> }
> 
> If we add some way to override Axis' default name mapping (ptEntry.getName()
> in above example) like this:
> 
> 
> ///////////////////// JavaGeneratorFactory in Axis
> protected void determineInterfaceName(SymbolTable symbolTable) {
> 	// ...
> 	if (entry instanceof BindingEntry) {
> 
> 		PortTypeEntry = ...
> 		seiName = getServiceEndpointInterfaceJavaNameHook(ptEntry,
> bEntry);
> 		if (seiName == null) {
> 			seiName = ptEntry.getName();
> 		}
> 		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
> seiName);
> 	}
> 	// ...
> }	
> 
> protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
> ptEntry, BindingEntry bEntry) {
> 	return null;
> }
> 
> The J2eeGeneratorFactory in ews look like this:
> 
> /////////////////////// J2eeGeneratorFactory in EWS
> 
> class J2eeGeneratorFactory extends
> org.apache.axis.wsdl.tojava.JavaGeneratorFactory {
> // determinedInterfaceName() : no more needed.
> 
> // add new method
> protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
> ptEntry, BindingEntry bEntry) {
> 	if (mapper == null)
> 		return null;
> 	return mapper.getServiceEndpointInterfaceName(ptEntry, bEntry);
> }
> // ...
> }
> 
> I have modified the codes in ews and axis and 
> it seems that almost duplicate codes in J2eeEmitter and J2eeGeneratorFactory
> can be removed.
> 
> Uhm... I think there are pros and cons in this way.
> The cons:
>   - Tightly coupling in the Axis code and ews (or other) codes
>  
> The pros:
>   - Simpler ews codes
>   - The Axis code can be reused in other Java <--> WSDL mapping case (like
> JSR-181)
> 
> I will discuss it more with Ias who is the Axis and ews committer. (He and I
> are working in the same company)
> I think that the code change in Axis like this should be with the consent of
> other Axis committers.
> 
> Any comment?
> 
> Jongjin/
> 
> ---------------------------------------------------
> Webservices Team in Tmax Soft.
> JSR-208 EG member.
> ---------------------------------------------------


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

Re: duplicate code in EWS and AXIS

Posted by Davanum Srinivas <di...@yahoo.com>.
Jongjin,

Am all for it. Please open a bug report with the "cvs diff -u" before Ias commits the code to the
Axis code base.

thanks,
dims

--- gunsnroz <gu...@hotmail.com> wrote:
> Hi, ews and axis people!
> 
> After comparing the codes in EWS and AXIS, I found that many of them are
> duplicated.
> Specially, the following codes are very similar.
> 
>   - J2eeEmitter <--> org.apache.axis.wsdl.tojava.Emitter
>   - J2eeGeneratorFactory <-->
> org.apache.axis.wsdl.tojava.JavaGeneratorFactory
> 
> The other codes such as J2eexxxWriter are deprecated in EWS because the
> equivalent ones in Axis 
> can be used. Like this, some modification in the axis Emitter and
> JavaGeneratorFactory
> makes the Axis code reusable and ews code simpler.
> 
> The basic idea is adding some codes that override the Axis' default Java
> <--> wsdl nampping in derived classes.
> Here is the example, (details omitted for brevity)
> 
> JavaGeneratorFactory.java from Axis
> 
> protected void determineInterfaceName(SymbolTable symbolTable) {
> 	// ...
> 	if (entry instanceof BindingEntry) {
> 
> 		PortTypeEntry = ...
> 		seiName = ptEntry.getName();
> 		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
> seiName);
> 	}
> 	// ...
> }
> 
> If we add some way to override Axis' default name mapping (ptEntry.getName()
> in above example) like this:
> 
> 
> ///////////////////// JavaGeneratorFactory in Axis
> protected void determineInterfaceName(SymbolTable symbolTable) {
> 	// ...
> 	if (entry instanceof BindingEntry) {
> 
> 		PortTypeEntry = ...
> 		seiName = getServiceEndpointInterfaceJavaNameHook(ptEntry,
> bEntry);
> 		if (seiName == null) {
> 			seiName = ptEntry.getName();
> 		}
> 		bEntry.setDynamicVar(JavaBindingWriter.INTERFACE_NAME,
> seiName);
> 	}
> 	// ...
> }	
> 
> protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
> ptEntry, BindingEntry bEntry) {
> 	return null;
> }
> 
> The J2eeGeneratorFactory in ews look like this:
> 
> /////////////////////// J2eeGeneratorFactory in EWS
> 
> class J2eeGeneratorFactory extends
> org.apache.axis.wsdl.tojava.JavaGeneratorFactory {
> // determinedInterfaceName() : no more needed.
> 
> // add new method
> protected String getServiceEndpointInterfaceJavaNameHook(PortTypeEntry
> ptEntry, BindingEntry bEntry) {
> 	if (mapper == null)
> 		return null;
> 	return mapper.getServiceEndpointInterfaceName(ptEntry, bEntry);
> }
> // ...
> }
> 
> I have modified the codes in ews and axis and 
> it seems that almost duplicate codes in J2eeEmitter and J2eeGeneratorFactory
> can be removed.
> 
> Uhm... I think there are pros and cons in this way.
> The cons:
>   - Tightly coupling in the Axis code and ews (or other) codes
>  
> The pros:
>   - Simpler ews codes
>   - The Axis code can be reused in other Java <--> WSDL mapping case (like
> JSR-181)
> 
> I will discuss it more with Ias who is the Axis and ews committer. (He and I
> are working in the same company)
> I think that the code change in Axis like this should be with the consent of
> other Axis committers.
> 
> Any comment?
> 
> Jongjin/
> 
> ---------------------------------------------------
> Webservices Team in Tmax Soft.
> JSR-208 EG member.
> ---------------------------------------------------


=====
Davanum Srinivas - http://webservices.apache.org/~dims/