Zdravím konferenci,

  narazili jsme s kolegy na jeden zajímavý problém. Vše to začalo tímto
stack trace:

Servlet.service() for servlet action threw exception
java.lang.NoSuchMethodError:
org.apache.struts.action.ActionRedirect.addParameter
(Ljava/lang/String;Ljava/lang/Object;)V
       at com.fg.webapp.cps.v1.frontend.cps.srv.APPLstoreCL.execute(
APPLstoreCL.java:71)
       at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(
ExecuteAction.java:58)
       at org.apache.struts.chain.commands.AbstractExecuteAction.execute(
AbstractExecuteAction.java:67)
       at org.apache.struts.chain.commands.ActionCommandBase.execute(
ActionCommandBase.java:51)

  Jedná se o knihovnu CPS, která je kompilovaná v Java 1.4.X s knihovnou
Struts 1.2.8. Chyba se projeví pokud takto zkompilovanou knihovnu CPS
použiji v projektu kompilovaném s Javou 1.5 a přilinkovanou knihovnou Struts
1.3.8. Chyba se odstraní ve chvíli, kdy knihovnu CPS zkompiluji (stále s
compilerem 1.4) s verzí Struts 1.3.8. Nicméně, knihovny Struts 1.2.X a
1.3.Xby měly být v daném místě kompatibilní - viz. Javadoc:


http://struts.apache.org/1.2.7/api/org/apache/struts/action/ActionRedirect.html

http://struts.apache.org/1.3.8/apidocs/org/apache/struts/action/ActionRedirect.html

  Tzn. naše knihovna CPS se dá beze změn zkompilovat jak se Struts 1.2.8,
tak i 1.3.8 - co je zarážející, že se stejným JDK kompilace knihovny CPS s
uvedenými verzemi vygeneruje binárně odlišný JAR.
  Nějak si tedy nedokážeme vysvětlit v čem je problém - protože se nám
uvedená situace zdá naprosto ok, a měla by být pokrytá kontraktem zpětné
kompatibility. Nenapadá vás někoho, kde by mohl být zakopaný pes?

  Ještě jedna možná zajímavá informace Struts 1.2.8 jsou kompilované s JDK
1.4, Struts 1.3.8 s JDK 1.5.

Díky za nápady,
Honza N.

--
--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------

Odpovedet emailem