Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #18974 > unrolled thread

Best way to generate XSD from Java

Started bythe don <donald@idaho.org>
First post2012-09-28 14:30 -0400
Last post2012-09-30 17:24 +0200
Articles 13 — 6 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  Best way to generate XSD from Java the don <donald@idaho.org> - 2012-09-28 14:30 -0400
    Re: Best way to generate XSD from Java Arne Vajhøj <arne@vajhoej.dk> - 2012-09-28 14:53 -0400
      Re: Best way to generate XSD from Java the don <donald@idaho.org> - 2012-09-28 15:21 -0400
        Re: Best way to generate XSD from Java Robert Klemme <shortcutter@googlemail.com> - 2012-09-28 21:34 +0200
          Re: Best way to generate XSD from Java the don <donald@idaho.org> - 2012-09-28 16:54 -0400
            Re: Best way to generate XSD from Java Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-09-28 23:35 +0200
            Re: Best way to generate XSD from Java Arne Vajhøj <arne@vajhoej.dk> - 2012-09-28 23:14 -0400
            Re: Best way to generate XSD from Java markspace <-@.> - 2012-09-29 01:34 -0700
              Re: Best way to generate XSD from Java Robert Klemme <shortcutter@googlemail.com> - 2012-09-29 12:43 +0200
            Re: Best way to generate XSD from Java Robert Klemme <shortcutter@googlemail.com> - 2012-09-29 12:55 +0200
          Re: Best way to generate XSD from Java Arne Vajhøj <arne@vajhoej.dk> - 2012-09-28 23:02 -0400
    Re: Best way to generate XSD from Java Roedy Green <see_website@mindprod.com.invalid> - 2012-09-30 04:03 -0700
      Re: Best way to generate XSD from Java Robert Klemme <shortcutter@googlemail.com> - 2012-09-30 17:24 +0200

#18974 — Best way to generate XSD from Java

Fromthe don <donald@idaho.org>
Date2012-09-28 14:30 -0400
SubjectBest way to generate XSD from Java
Message-ID<1lz5htc7ru4px.y4dvutffaftd$.dlg@40tude.net>
Want to tag Methods first, then input tagged Java file to code generator,
like JavaDoc or Velocity, then output XML Schema with elements generated
according to parameters provided by tags.

Better to use JavaDoc Tags or Annotations? What Templating engine(s) do you
recommend?

Thanks

[toc] | [next] | [standalone]


#18975

FromArne Vajhøj <arne@vajhoej.dk>
Date2012-09-28 14:53 -0400
Message-ID<5065f23e$0$285$14726298@news.sunsite.dk>
In reply to#18974
On 9/28/2012 2:30 PM, the don wrote:
> Want to tag Methods first, then input tagged Java file to code generator,
> like JavaDoc or Velocity, then output XML Schema with elements generated
> according to parameters provided by tags.
>
> Better to use JavaDoc Tags or Annotations? What Templating engine(s) do you
> recommend?

Annotations are a lot easier to process than source code parsing.

And I assume that you want to write a customer generator.

The easy solution is JAXB annotations and schemagen.

Arne

[toc] | [prev] | [next] | [standalone]


#18977

Fromthe don <donald@idaho.org>
Date2012-09-28 15:21 -0400
Message-ID<1w8k70m8bfjn7.g6ysc3inyk4d$.dlg@40tude.net>
In reply to#18975
On Fri, 28 Sep 2012 14:53:43 -0400, Arne Vajhøj wrote:

> On 9/28/2012 2:30 PM, the don wrote:
>> Want to tag Methods first, then input tagged Java file to code generator,
>> like JavaDoc or Velocity, then output XML Schema with elements generated
>> according to parameters provided by tags.
>>
>> Better to use JavaDoc Tags or Annotations? What Templating engine(s) do you
>> recommend?
> 
> Annotations are a lot easier to process than source code parsing.
> 
> And I assume that you want to write a customer generator.
> 
> The easy solution is JAXB annotations and schemagen.
> 
> Arne

Thank you, I will take a look

[toc] | [prev] | [next] | [standalone]


#18979

FromRobert Klemme <shortcutter@googlemail.com>
Date2012-09-28 21:34 +0200
Message-ID<acmcf7Fl42U1@mid.individual.net>
In reply to#18977
On 28.09.2012 21:21, the don wrote:
> On Fri, 28 Sep 2012 14:53:43 -0400, Arne Vajhøj wrote:
>
>> On 9/28/2012 2:30 PM, the don wrote:
>>> Want to tag Methods first, then input tagged Java file to code generator,
>>> like JavaDoc or Velocity, then output XML Schema with elements generated
>>> according to parameters provided by tags.
>>>
>>> Better to use JavaDoc Tags or Annotations? What Templating engine(s) do you
>>> recommend?
>>
>> Annotations are a lot easier to process than source code parsing.
>>
>> And I assume that you want to write a customer generator.
>>
>> The easy solution is JAXB annotations and schemagen.
>>
>> Arne
>
> Thank you, I will take a look

Just a side note: I prefer to create the schema _first_ because that is 
something the user will face (I am thinking of configuration files 
here).  So first comes usability for the user and only then I bother how 
that will be transferred into Java land.  I use "trang" to generate an 
XSD and modify it manually afterwards.

http://www.thaiopensource.com/relaxng/trang.html

If you are designing XML based persistence of Java classes then of 
course your approach is at least equally valid.  But I would do that 
only if I am sure no human being needs to edit those XML files.

Kind regards

	robert


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

[toc] | [prev] | [next] | [standalone]


#18980

Fromthe don <donald@idaho.org>
Date2012-09-28 16:54 -0400
Message-ID<1ufgvja2wnfn2$.1uat2fmq12932$.dlg@40tude.net>
In reply to#18979
On Fri, 28 Sep 2012 21:34:51 +0200, Robert Klemme wrote:

> On 28.09.2012 21:21, the don wrote:
>> On Fri, 28 Sep 2012 14:53:43 -0400, Arne Vajhøj wrote:
>>
>>> On 9/28/2012 2:30 PM, the don wrote:
>>>> Want to tag Methods first, then input tagged Java file to code generator,
>>>> like JavaDoc or Velocity, then output XML Schema with elements generated
>>>> according to parameters provided by tags.
>>>>
>>>> Better to use JavaDoc Tags or Annotations? What Templating engine(s) do you
>>>> recommend?
>>>
>>> Annotations are a lot easier to process than source code parsing.
>>>
>>> And I assume that you want to write a customer generator.
>>>
>>> The easy solution is JAXB annotations and schemagen.
>>>
>>> Arne
>>
>> Thank you, I will take a look
> 
> Just a side note: I prefer to create the schema _first_ because that is 
> something the user will face (I am thinking of configuration files 
> here).  So first comes usability for the user and only then I bother how 
> that will be transferred into Java land.  I use "trang" to generate an 
> XSD and modify it manually afterwards.
> 
> http://www.thaiopensource.com/relaxng/trang.html
> 
> If you are designing XML based persistence of Java classes then of 
> course your approach is at least equally valid.  But I would do that 
> only if I am sure no human being needs to edit those XML files.
> 
> Kind regards
> 
> 	robert

Let me clarify a little bit, I'm not trying to do what JAXB does. I'm not
trying to marshall and unmarshall XML info to and from Java. In fact, The
XSD files produced *will* be compiled with xjc for that purpose but they
will *not* translate between XML and the annotated Java Classes which were
used to produce them. 

I intend to automate the Methods in the annotated Java Classes, ie store
sequences of Method calls in XML files, read them into memory and then
invoke them in instantiated Object(s) of that type. I would like to start
with the Classes themselves, tag or annotate the Methods I want to make
available for automation, then generate an XSD which can be used by JAXB
for marshalling and unmarshalling, as well as for creating and editing
these "Command Strings" with validation. Eclipse, for instance, provides
something like the latter capability

There is probably some way to tag (or annotate!) a Java file so that a
Templating engine could generate the desired output, and I doubt that it is
very difficult. I was just asking to see what experience people here have
had with this sort of thing and give me some direction.

Thank you

P.S. the annotations I'm speaking of would indicate things like a Method's
name, it's return type and it's arguments. Right now such Methods only take
and return Java Primitives but that is because XML Schema makes it easier
to do since it provides simple types that correspond to each of them, and
that makes validation possible

[toc] | [prev] | [next] | [standalone]


#18982

FromDaniele Futtorovic <da.futt.news@laposte-dot-net.invalid>
Date2012-09-28 23:35 +0200
Message-ID<k4557n$oc0$1@dont-email.me>
In reply to#18980
On 28/09/2012 22:54, the don allegedly wrote:
> Let me clarify a little bit, I'm not trying to do what JAXB does. I'm not
> trying to marshall and unmarshall XML info to and from Java. In fact, The
> XSD files produced *will* be compiled with xjc for that purpose but they
> will *not* translate between XML and the annotated Java Classes which were
> used to produce them. 
> 
> I intend to automate the Methods in the annotated Java Classes, ie store
> sequences of Method calls in XML files, read them into memory and then
> invoke them in instantiated Object(s) of that type. I would like to start
> with the Classes themselves, tag or annotate the Methods I want to make
> available for automation, then generate an XSD which can be used by JAXB
> for marshalling and unmarshalling, as well as for creating and editing
> these "Command Strings" with validation. Eclipse, for instance, provides
> something like the latter capability
> 
> There is probably some way to tag (or annotate!) a Java file so that a
> Templating engine could generate the desired output, and I doubt that it is
> very difficult. I was just asking to see what experience people here have
> had with this sort of thing and give me some direction.
> 
> Thank you
> 
> P.S. the annotations I'm speaking of would indicate things like a Method's
> name, it's return type and it's arguments. Right now such Methods only take
> and return Java Primitives but that is because XML Schema makes it easier
> to do since it provides simple types that correspond to each of them, and
> that makes validation possible

Uh, indeed, you're not trying to do what JAXB does, and I am doubtful
whether it will be of use to you at all. An XML document is, an XSD
describes, and the Java Binding API binds, *data structures*. They have
no concept of methods as such.

You'll probably be better off writing your own annotation parser and
generating the schema on the fly (and pondering whether to use JAXB
annotations or your own). See
<http://docs.oracle.com/javase/6/docs/technotes/guides/apt/index.html>
and
<http://docs.oracle.com/javase/6/docs/jdk/api/apt/mirror/overview-summary.html>
for more information.

-- 
DF.

[toc] | [prev] | [next] | [standalone]


#18987

FromArne Vajhøj <arne@vajhoej.dk>
Date2012-09-28 23:14 -0400
Message-ID<506667ab$0$287$14726298@news.sunsite.dk>
In reply to#18980
On 9/28/2012 4:54 PM, the don wrote:
> I intend to automate the Methods in the annotated Java Classes, ie store
> sequences of Method calls in XML files, read them into memory and then
> invoke them in instantiated Object(s) of that type. I would like to start
> with the Classes themselves, tag or annotate the Methods I want to make
> available for automation, then generate an XSD which can be used by JAXB
> for marshalling and unmarshalling, as well as for creating and editing
> these "Command Strings" with validation. Eclipse, for instance, provides
> something like the latter capability
>
> There is probably some way to tag (or annotate!) a Java file so that a
> Templating engine could generate the desired output, and I doubt that it is
> very difficult. I was just asking to see what experience people here have
> had with this sort of thing and give me some direction.

JAXB is for data classes. I don't think it will work for you.

Annotations and a processor that generates Java code must be the
right way forward for your problem.

Arne

[toc] | [prev] | [next] | [standalone]


#18989

Frommarkspace <-@.>
Date2012-09-29 01:34 -0700
Message-ID<k46bra$dic$1@dont-email.me>
In reply to#18980
On 9/28/2012 1:54 PM, the don wrote:

> P.S. the annotations I'm speaking of would indicate things like a Method's
> name, it's return type and it's arguments.


This sounds suspiciously like information that's already in the class 
files.  Are you planning on parsing source files, or interpreting byte 
codes?  The javap already does this, to a degree.

Possibly all you need to do is mark a method for testing;  the return 
type and argument list is retained in the byte code .class file.


[toc] | [prev] | [next] | [standalone]


#18990

FromRobert Klemme <shortcutter@googlemail.com>
Date2012-09-29 12:43 +0200
Message-ID<aco1mrFbse0U1@mid.individual.net>
In reply to#18989
On 09/29/2012 10:34 AM, markspace wrote:
> On 9/28/2012 1:54 PM, the don wrote:
>
>> P.S. the annotations I'm speaking of would indicate things like a
>> Method's
>> name, it's return type and it's arguments.
>
> This sounds suspiciously like information that's already in the class
> files.  Are you planning on parsing source files, or interpreting byte
> codes?  The javap already does this, to a degree.

Exactly what I would have remarked: _all_ that information is already 
available in the class file.

> Possibly all you need to do is mark a method for testing;  the return
> type and argument list is retained in the byte code .class file.

I would even go as far as to claim that it is harmful to include said 
information in the annotation because it is redundant and won't 
automatically be adjusted if the class is changed.  Then there will be 
conflicting information.

Kind regards

	robert

[toc] | [prev] | [next] | [standalone]


#18991

FromRobert Klemme <shortcutter@googlemail.com>
Date2012-09-29 12:55 +0200
Message-ID<aco2d7Fc36cU1@mid.individual.net>
In reply to#18980
On 09/28/2012 10:54 PM, the don wrote:

> Let me clarify a little bit, I'm not trying to do what JAXB does. I'm not
> trying to marshall and unmarshall XML info to and from Java. In fact, The
> XSD files produced *will* be compiled with xjc for that purpose but they
> will *not* translate between XML and the annotated Java Classes which were
> used to produce them.

A few lines down you say "generate an XSD which can be used by JAXB for 
marshalling and unmarshalling".

> I intend to automate the Methods in the annotated Java Classes, ie store
> sequences of Method calls in XML files, read them into memory and then
> invoke them in instantiated Object(s) of that type. I would like to start
> with the Classes themselves, tag or annotate the Methods I want to make
> available for automation, then generate an XSD which can be used by JAXB
> for marshalling and unmarshalling, as well as for creating and editing
> these "Command Strings" with validation. Eclipse, for instance, provides
> something like the latter capability
>
> There is probably some way to tag (or annotate!) a Java file so that a
> Templating engine could generate the desired output, and I doubt that it is
> very difficult. I was just asking to see what experience people here have
> had with this sort of thing and give me some direction.

You can have javac use an annotation processor, if you want to do your 
work on compilation time.  In your case you would likely need to to some 
processing after compiling all classes in order to be able to combine 
information obtained from individual classes into a single XSD (if only 
for including all other XSD snippets).

 From what I understand about your goal you should probably generally 
distinguish two things here:

1. creating objects
2. invoking methods

JAXB might help you with 1 but certainly not with 2.  Also, you need a 
way to define variables to store references to created objects in so you 
can use them in method calls.  So, basically your XML needs to be able 
to store... what?  Basically you want an interpreter to execute Java 
code, don't you?  Thinking a few corners further you'll notice that 
there is actually already a way to specify sequences of method 
invocations: Java code.  You might be better off with some BeanShell 
solution in the end.  You get editors with semantic insight for free 
(it's your IDE) etc.

Kind regards

	robert

http://www.beanshell.org/

[toc] | [prev] | [next] | [standalone]


#18986

FromArne Vajhøj <arne@vajhoej.dk>
Date2012-09-28 23:02 -0400
Message-ID<506664cd$0$287$14726298@news.sunsite.dk>
In reply to#18979
On 9/28/2012 3:34 PM, Robert Klemme wrote:
> Just a side note: I prefer to create the schema _first_ because that is
> something the user will face (I am thinking of configuration files
> here).

Contract first vs code first is a classic discussion.

Arne

[toc] | [prev] | [next] | [standalone]


#18994

FromRoedy Green <see_website@mindprod.com.invalid>
Date2012-09-30 04:03 -0700
Message-ID<km9g681quk0b3hqmrngp113lkggd5963kc@4ax.com>
In reply to#18974
On Fri, 28 Sep 2012 14:30:51 -0400, the don <donald@idaho.org> wrote,
quoted or indirectly quoted someone who said :

>Want to tag Methods first, then input tagged Java file to code generator,
>like JavaDoc or Velocity, then output XML Schema with elements generated
>according to parameters provided by tags.

You might want to tackle this by parsing the Java to a tree, then
generating what you need directly. See
http://mindprod.com/jgloss/parser.html
-- 
Roedy Green Canadian Mind Products http://mindprod.com
The iPhone 5 is a low end Rolex. 

[toc] | [prev] | [next] | [standalone]


#18995

FromRobert Klemme <shortcutter@googlemail.com>
Date2012-09-30 17:24 +0200
Message-ID<acr6i4F3n2jU2@mid.individual.net>
In reply to#18994
On 30.09.2012 13:03, Roedy Green wrote:
> On Fri, 28 Sep 2012 14:30:51 -0400, the don <donald@idaho.org> wrote,
> quoted or indirectly quoted someone who said :
>
>> Want to tag Methods first, then input tagged Java file to code generator,
>> like JavaDoc or Velocity, then output XML Schema with elements generated
>> according to parameters provided by tags.
>
> You might want to tackle this by parsing the Java to a tree, then
> generating what you need directly. See

... or create a DSL right away if the functionality should be restricted 
in some way compared to what one can do with pure Java.

Cheers

	robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web