users@jaxb.java.net

Re: Using javaType to map custom classes

From: Dan Lange <dlange02_at_HARRIS.COM>
Date: Sat, 22 Feb 2003 07:39:42 -0700

Attached are detailed self contained instructions for reproducing this problem. I also e-mailed them directly to Kohsuke in a jar file.

Instructions to run the MyName example:
#################################
1) Unjar the attached jar file:
#################################
C:\WINNT>cd C:\
C:\>jar xvf myname.jar
  created: META-INF/
extracted: META-INF/MANIFEST.MF
  created: myname/
  created: myname/class/
extracted: myname/compile_myname.cmd
extracted: myname/myname.xsd
extracted: myname/myname_env.cmd
  created: myname/src/
  created: myname/src/com/
  created: myname/src/com/harris/
extracted: myname/src/com/harris/MyName.java
extracted: myname/test_classpath.cmd
extracted: myname/xjc_myname.cmd

#################################
2) Setup your environment:
#################################

C:\>cd myname

C:\myname>myname_env

C:\myname>set MYNAME_DIR=C:\myname

C:\myname>set JAXB_HOME=C:\jaxb-1.0-beta

C:\myname>set JAXB_LIBS=C:\jaxb-1.0-beta\lib

C:\myname>set MYNAME_SRC=C:\myname\src

C:\myname>set MYNAME_CLASS=C:\myname\class

C:\myname>set CLASSPATH=C:\Program Files\Common Files\Mercury Interactive\Shared Files\JavaAddin\classes;;C:\jaxb-1.0-beta\lib\jaxb-api.jar;C:\jaxb-1.0-beta\lib\jaxb-ri.jar;C:\jaxb-1.0-beta\lib\jaxb-xjc.jar;C:\jaxb-1.0-beta\lib\jaxb-libs.jar;C:\jaxb-1.0-beta\lib\jaxp-api.jar;C:\jaxb-1.0-beta\lib\xercesImpl.jar;C:\jaxb-1.0-beta\lib\sax.jar;C:\jaxb-1.0-beta\lib\dom.jar;C:\jaxb-1.0-beta\lib\jax-qname.jar;C:\myname\class;.

#################################
3) Compile MyName.java:
#################################

C:\myname>compile_myname

C:\myname>javac -sourcepath C:\myname\src -d C:\myname\class C:\myname\src\com\harris\MyName.java

#################################
4) Verify that MyName.class is in the classpath:
#################################
C:\myname>test_classpath

C:\myname>java com.harris.MyName
MyName must be in the classpath, since you are able to invoke the main method.

#################################
5) Generate the schema:
#################################

C:\myname>xjc_myname

C:\myname>C:\jaxb-1.0-beta\bin\xjc.bat C:\myname\myname.xsd
parsing a schema...
Unable to load "com.harris.MyName" Is this class available in the classpath?
  line 14 of myname.xsd

Failed to parse a schema.


Files used:
myname.xsd:
<xsd:schema xmlns="http://www.harris.com"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:hrs="http://www.harris.com"
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            jxb:version="1.0"
            targetNamespace="http://www.harris.com"
            elementFormDefault="unqualified"
            attributeFormDefault="unqualified">
<xsd:simpleType name="MyName">
   <xsd:annotation>
      <xsd:appinfo>
         <jxb:javaType name="com.harris.MyName"
                       parse="new"
         print="toString" />
      </xsd:appinfo>
   </xsd:annotation>
   <xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:schema>

MyName.java:
package com.harris;

public class MyName {
    private String name;
    public MyName(String name){
 this.name = name;
    }

    public String toString(){
 return name;
    }

    public static void main(String[] args){
 System.out.println("MyName must be in the classpath, since you are able to invoke the main method.");
    }

}

myname_env.cmd:
set MYNAME_DIR=C:\myname
set JAXB_HOME=C:\jaxb-1.0-beta
set JAXB_LIBS=%JAXB_HOME%\lib

set MYNAME_SRC=%MYNAME_DIR%\src
set MYNAME_CLASS=%MYNAME_DIR%\class

set CLASSPATH=%CLASSPATH%;%JAXB_LIBS%\jaxb-api.jar;%JAXB_LIBS%\jaxb-ri.jar;%JAXB_LIBS%\jaxb-xjc.jar;%JAXB_LIBS%\jaxb-libs.jar;%JAXB_LIBS%\jaxp-api.jar;%JAXB_LIBS%\xercesImpl.jar;%JAXB_LIBS%\sax.jar;%JAXB_LIBS%\dom.jar;%JAXB_LIBS%\jax-qname.jar;%MYNAME_CLASS%;.

compile_myname.cmd:
javac -sourcepath %MYNAME_SRC% -d %MYNAME_CLASS% %MYNAME_SRC%\com\harris\MyName.java

test_classpath.cmd:
java com.harris.MyName

xjc_myname.cmd:
%JAXB_HOME%\bin\xjc.bat %MYNAME_DIR%\myname.xsd