Hi Josh,

The problem here is that your binding.xml doesn't just reference the 
binding defined for Person in person-binding.xml - it creates a new 
binding for Person, in the form of the embedded <structure 
type="com.mycompany.apsp.crossjardepend.Person">. To use the precompiled 
binding version, change this to <structure 
type="com.mycompany.apsp.crossjardepend.Person" map-as="tns1:person"/>, 
where tns1 is defined as "http://accenture.com/apsp/crossjardepend";.

  - Dennis


Josh L wrote:
> Hello, 
> Hopefully someone can help me with an error I'm struggling with while trying
> to use precompiled bindings. I'm trying to create a simple prototype where I
> have a compiled binding/class in a jar file that is used as a dependency of
> another project containing a binding and a class which extends a class
> contained in the jar file. The jar contains a class Person, and the
> jibx_bindingfactory compiled class that goes with it. The dependant project
> contains a class Customer that extends Person, and binding.xml and
> person-binding.xml mapping files. 
>
> Im getting the error below when I try to run a build shared library/compile
> bindings task:
>
> [java] java.lang.IllegalStateException: Internal error - cannot modify class
> com.accenture.apsp.crossjardepend.Person loaded from D:\Projects\APSP_int
> egration\CrossJarDependency\lib\person-shared.jar
>      [java]   at
> org.jibx.binding.classes.ClassFile.getClassGen(ClassFile.java:1283)
>      [java]   at
> org.jibx.binding.classes.ClassFile.getInstructionBuilder(ClassFile.java:1308)
>      [java]   at
> org.jibx.binding.classes.MethodBuilder.<init>(MethodBuilder.java:168)
>      [java]   at
> org.jibx.binding.classes.ExceptionMethodBuilder.<init>(ExceptionMethodBuilder.java:59)
>      [java]   at
> org.jibx.binding.classes.BoundClass.getStoreMethod(BoundClass.java:237)
>      [java]   at
> org.jibx.binding.def.PropertyDefinition.genStore(PropertyDefinition.java:699)
>      [java]   at
> org.jibx.binding.def.ValueChild.genUnmarshal(ValueChild.java:593)
>      [java]   at
> org.jibx.binding.def.ValueChild.genContentUnmarshal(ValueChild.java:885)
>      [java]   at
> org.jibx.binding.def.NestedStructure.genContentUnmarshal(NestedStructure.java:215)
>      [java]   at
> org.jibx.binding.def.ObjectBinding.genUnmarshalContentMethod(ObjectBinding.java:882)
>      [java]   at
> org.jibx.binding.def.ObjectBinding.genContentUnmarshal(ObjectBinding.java:1078)
>      [java]   at
> org.jibx.binding.def.ComponentProperty.genContentUnmarshal(ComponentProperty.java:299)
>      [java]   at
> org.jibx.binding.def.NestedStructure.genContentUnmarshal(NestedStructure.java:215)
>      [java]   at
> org.jibx.binding.def.ObjectBinding.genUnmarshalContentMethod(ObjectBinding.java:882)
>      [java]   at
> org.jibx.binding.def.ObjectBinding.genContentUnmarshal(ObjectBinding.java:1078)
>      [java]   at
> org.jibx.binding.def.MappingDefinition.generateUnmarshalImplementation(MappingDefinition.java:642)
>      [java]   at
> org.jibx.binding.def.MappingDefinition.generateCode(MappingDefinition.java:850)
>      [java]   at
> org.jibx.binding.def.DefinitionContext.generateCode(DefinitionContext.java:620)
>      [java]   at
> org.jibx.binding.def.BindingDefinition.generateCode(BindingDefinition.java:986)
>      [java]   at org.jibx.binding.Compile.compile(Compile.java:221)
>      [java]   at org.jibx.binding.Compile.main(Compile.java:374)
>
> My ant task is as follows:
>
> <target name="build-shared">
>       <delete quiet="true" dir="${basedir}/bin" />
>       <mkdir dir="${basedir}/bin" />
>       <echo message="Compiling shared classes" />
>       <javac srcdir="${basedir}/src/main/java" destdir="${basedir}/bin"
> classpathref="bind-classpath" />
>       <echo message="Running JiBX binding compiler" />
>       <java classname="org.jibx.binding.Compile" fork="yes" failonerror="true"
> classpathref="bind-classpath">
>         <arg value="-v"/>
>         <arg value="${basedir}/gen/binding.xml"/>                     
>         </java>
>
>                               
>               <echo message="Constructing and copying shared.jar" />
>               <mkdir dir="${build-client}/lib" />
>               <jar jarfile="${build-client}/lib/shared.jar" 
> basedir="${basedir}/bin" />
>               <mkdir dir="${build-service}/lib" />
>               <copy todir="${build-service}/lib" 
> file="${build-client}/lib/shared.jar"
> />
> </target>
>
> Here is my binding.xml:
> <binding xmlns:tns="http://mycompany.com/apsp/domain";
> xmlns:ns0="http://mycompany.com/apsp/integration/CustomerService";
> name="binding" package="com.mycompany.apsp.domain" force-classes="true"
> add-constructors="true">
>   <namespace uri="http://mycompany.com/apsp/domain"; default="elements"/>
>   <namespace uri="http://mycompany.com/apsp/integration/CustomerService";
> prefix="ns0"/>
>   <namespace uri="http://mycompany.com/apsp/crossjardepend"; prefix="ns1" />
>   <include
> path="file:///D:/Projects/APSP_integration/CrossJarDependency/gen/person-binding.xml"
> precompiled="true"/>
>   <mapping abstract="true" type-name="tns:customer"
> class="com.mycompany.apsp.domain.Customer">
>     <structure type="com.mycompany.apsp.crossjardepend.Person">
>       <value style="element" name="id" field="id" usage="optional"/>
>     </structure>
>     <value style="element" name="firstName" field="firstName"
> usage="optional"/>
>     <value style="element" name="lastName" field="LastName"
> usage="optional"/>
>     <value style="element" name="phone" field="phone" usage="optional"/>
>   </mapping>
> </binding>
>
> Here is the person-binding.xml that is referenced above:
>
> <binding xmlns:tns="http://accenture.com/apsp/crossjardepend"; name="binding"
> package="com.accenture.apsp.crossjardepend">
>   <namespace uri="http://accenture.com/apsp/crossjardepend";
> default="elements"/>
>   <mapping abstract="true" type-name="tns:person"
> class="com.accenture.apsp.crossjardepend.Person">
>     <value style="element" name="id" field="id" usage="optional"/>
>   </mapping>
>   <mapping abstract="true" class="com.accenture.apsp.crossjardepend.Person"
> name="person">
>     <structure map-as="tns:person"/>
>   </mapping>
> </binding>
>
>
> Thanks for any help or ideas for getting past this error!
>
> -Josh L
>
>   

------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to