Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

What

...

is

...

Aegis?

...

Aegis

...

is

...

a

...

databinding.

...

That

...

is,

...

it

...

is

...

a

...

subsystem

...

that

...

can

...

map

...

Java

...

objects

...

to

...

XML

...

documents

...

described

...

by

...

XML

...

schema,

...

and

...

vica-versa.

...

Aegis

...

is

...

designed

...

to

...

give

...

useful

...

mappings

...

with

...

a

...

minimum

...

of

...

programmer

...

effort,

...

while

...

allowing

...

detailed

...

control

...

and

...

customization.

...

Aegis

...

began

...

as

...

part

...

of

...

XFire,

...

and

...

moved

...

with

...

XFire

...

into

...

Apache

...

CXF.

...

You

...

can

...

use

...

Aegis

...

independently

...

of

...

CXF

...

as

...

a

...

mechanism

...

for

...

mapping

...

Java

...

objects

...

to

...

and

...

from

...

XML.

...

This

...

page,

...

however,

...

describes

...

Aegis

...

as

...

used

...

inside

...

of

...

CXF.

...

Aegis

...

has

...

some

...

advantages

...

over

...

JAXB

...

for

...

some

...

applications.

...

Some

...

users

...

find

...

that

...

it

...

produces

...

a

...

more

...

natural

...

XML

...

mapping

...

for

...

less

...

configuration.

...

For

...

example,

...

Aegis

...

has

...

a

...

default

...

setting

...

for

...

'nillable',

...

allowing

...

you

...

to

...

declare

...

it

...

for

...

your

...

entire

...

service

...

in

...

one

...

place

...

instead

...

of

...

having

...

to

...

annotate

...

every

...

single

...

element.

...

The

...

biggest

...

advantage

...

of

...

Aegis,

...

however,

...

is

...

a

...

convenient

...

way

...

to

...

customize

...

the

...

mapping

...

without

...

adding

...

(@)annotations

...

to

...

your

...

Java

...

code.

...

This

...

allows

...

you

...

to

...

avoid

...

class

...

loading

...

dependencies

...

between

...

your

...

data

...

classes

...

and

...

your

...

web

...

service

...

binding.

...

Getting Started:

...

Basic

...

Use

...

of

...

Aegis

...

You

...

can

...

configure

...

any

...

web

...

service to

...

use

...

the

...

Aegis

...

data

...

binding.

...

A

...

service

...

configured

...

with

...

Aegis

...

will

...

yield

...

a

...

valid

...

WSDL

...

description,

...

and

...

you

...

can

...

use

...

that

...

to

...

configure

...

any

...

client

...

that

...

you

...

like.

...

You

...

can

...

talk

...

to

...

an

...

Aegis

...

service

...

with

...

JAXB,

...

or

...

.NET,

...

or

...

a

...

scripted

...

language,

...

or

...

...

...

Aegis

...

itself.

...

You

...

can

...

use

...

Aegis

...

as

...

a

...

client

...

to

...

talk

...

to

...

Aegis,

...

by

...

using

...

the

...

very

...

same

...

Java

...

classes

...

and

...

configuration

...

files

...

in

...

the

...

client

...

environment

...

that

...

you

...

use

...

on

...

the

...

server.

...

However,

...

it's

...

not

...

all

...

that

...

practical

...

to

...

use

...

Aegis

...

as

...

a

...

client

...

to

...

talk

...

to

...

some

...

a

...

service

...

using

...

some

...

other

...

data

...

binding,

...

since

...

Aegis

...

lacks

...

a

...

'wsdl2java'

...

tool.

...

Every

...

CXF

...

service

...

and

...

client

...

uses

...

a

...

front

...

end:

...

JAX-WS,

...

Simple,

...

etc.

...

Each

...

of

...

these

...

provides

...

a

...

place

...

to

...

configure

...

the

...

data

...

binding,

...

both

...

in

...

Spring

...

and

...

via

...

Java

...

code.

...

For

...

example,

...

here

...

is

...

a

...

Simple

...

front-end

...

service

...

using

...

Aegis

...

as

...

a

...

data

...

binding.

Code Block
xml
xml


{code:xml}
  <simple:server id="pojoservice" serviceClass="demo.hw.server.HelloWorld" address="/hello_world">
  	<simple:serviceBean>
  		<bean class="demo.hw.server.HelloWorldImpl" />
  	</simple:serviceBean>
         <simple:dataBinding>
       <bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
    </simple:dataBinding>
  </simple:server>
 </bean>
{code}

AegisDatabinding

...

is

...

the

...

class

...

that

...

integrates

...

Aegis

...

into

...

CXF

...

as

...

a

...

databinding.

...

Aegis

...

Operations

...

-

...

The

...

Simple

...

Case

...

How

...

does

...

Aegis

...

work?

...

Aegis

...

maintains,

...

for

...

each

...

service,

...

a

...

set

...

of

...

mappings

...

from

...

Java

...

types

...

(Class<?>

...

objects)

...

to

...

XML

...

Schema

...

types.

...

It

...

uses

...

that

...

mapping

...

to

...

read

...

and

...

write

...

XML.

...

Let's

...

look

...

at

...

a

...

simple

...

service,

...

where

...

all

...

the

...

Java

...

types

...

involved

...

are

...

either

...

Java

...

built-in

...

types,

...

other

...

types

...

with

...

predefined

...

mappings

...

to

...

XML

...

Schema,

...

or

...

simple

...

bean-pattern

...

classes

...

that

...

have

...

properties

...

that

...

(recursively)

...

are

...

simple.

...

Let's

...

start

...

with

...

serializing

...

:

...

mapping

...

from

...

Java

...

to

...

XML.

...

(JAXB

...

calls

...

this

...

marshalling,

...

and

...

cannot

...

decide

...

how

...

many

...

'l's

...

to

...

use

...

in

...

spelling

...

it.)

...

Given

...

a

...

Java

...

object,

...

Aegis

...

looks

...

to

...

see

...

if

...

it

...

has

...

a

...

mapping.

...

By

...

default,

...

Aegis

...

has

...

a

...

set

...

of

...

default

...

mappings

...

for

...

the

...

basic

...

types

...

defined

...

in

...

XML

...

Schema,

...

plus

...

a

...

few

...

other

...

special

...

items.

...

These

...

mappings

...

are

...

implemented

...

by

...

Java

...

classes,

...

parts

...

of

...

Aegis,

...

that

...

can

...

turn

...

objects

...

in

...

to

...

XML

...

and

...

vica

...

versa.

...

In

...

particular,

...

note

...

that

...

Aegis

...

will

...

map

...

a

...

DataSource

...

or

...

DataHandler

...

to

...

an

...

MTOM

...

attachment.

...

What

...

if

...

Aegis

...

finds

...

no

...

mapping

...

for

...

a

...

type?

...

In

...

the

...

default

...

configuration,

...

Aegis

...

invokes

...

the

...

type

...

creators

...

to

...

create

...

a

...

mapping.

...

Type

...

creators

...

use

...

several

...

mechanisms

...

to

...

create

...

XML

...

schema

...

from

...

Java

...

objects.

...

This

...

include

...

reflection,

...

annotations,

...

and

...

XML

...

type

...

mappings

...

files.

...

As

...

part

...

of

...

the

...

mapping

...

process,

...

Aegis

...

will

...

assign

...

a

...

namespace

...

URI

...

based

...

on

...

the

...

Java

...

package.

...

(

...

Note

...

:

...

Aegis

...

does

...

not

...

support

...

elementForm='unqualified'

...

at

...

this

...

time.)

...

These

...

mappings

...

are

...

implemented

...

by

...

a

...

generic

...

mapping

...

class,

...

and

...

stored

...

away.

...

How

...

about

...

the

...

reverse

...

process:

...

deserializing

...

?

...

(JAXB

...

calls

...

this

...

unmarshalling.)

...

In

...

this

...

case,

...

by

...

default,

...

Aegis

...

is

...

presented

...

with

...

an

...

XML

...

element

...

and

...

asked

...

to

...

produce

...

a

...

Java

...

object.

...

Recall,

...

however,

...

that

...

the

...

Aegis

...

maintains

...

a

...

mapping

...

from

...

Java

...

types

...

to

...

XML

...

Schema

...

Types.

...

By

...

default,

...

an

...

XML

...

instance

...

document

...

offers

...

no

...

information

...

as

...

to

...

the

...

type

...

of

...

a

...

given

...

element.

...

How

...

can

...

Aegis

...

determine

...

the

...

Java

...

type?

...

Outside

...

of

...

CXF,

...

the

...

application

...

would

...

have

...

to

...

tell

...

Aegis

...

the

...

expected

...

type

...

for

...

the

...

root

...

element

...

of

...

a

...

document.

...

Inside

...

CXF,

...

however,

...

Aegis

...

gets

...

the

...

benefit

...

of

...

the

...

Message

...

and

...

Part

...

information

...

for

...

the

...

service.

...

The

...

WSDL

...

service

...

configuration

...

for

...

a

...

service

...

gives

...

enough

...

information

...

to

...

associate

...

an

...

XML

...

Schema

...

type

...

with

...

each

...

part.

...

Once

...

the

...

front-end

...

has

...

determined

...

the

...

part,

...

it

...

can

...

call

...

Aegis

...

with

...

the

...

QName

...

for

...

the

...

schema

...

type,

...

and

...

Aegis

...

can

...

look

...

it

...

up

...

in

...

the

...

mapping.

...

Will

...

it

...

be

...

in

...

the

...

mapping?

...

Yes,

...

because

...

Aegis

...

precreates

...

mappings

...

for

...

the

...

types

...

in

...

the

...

service's

...

parts.

...

Aegis

...

cannot

...

dynamically

...

create

...

or

...

choose

...

a

...

Java

...

class

...

based

...

on

...

XML

...

schema,

...

so

...

the

...

type

...

creators

...

cannot

...

start

...

from

...

XML.

...

Using

...

Java

...

Classes

...

That

...

Aren't

...

Visible

...

to

...

the

...

Service

...

Interface

...

Many

...

web

...

service

...

programmers

...

want

...

to

...

use

...

types

...

that

...

are

...

not

...

directly

...

visible

...

by

...

reflection

...

of

...

the

...

service

...

interface.

...

Here

...

are

...

some

...

popular

...

examples

...

of

...

types

...

that

...

programmers

...

want

...

to

...

use

...

for

...

property

...

or

...

parameter

...

types:

...

  • Declare

...

  • a

...

  • base

...

  • type,

...

  • but

...

  • transfer

...

  • any

...

  • one

...

  • of

...

  • a

...

  • number

...

  • of

...

  • classes

...

  • that

...

  • extend

...

  • it.

...

  • Declare

...

  • a

...

  • raw

...

  • Collection

...

  • class,

...

  • such

...

  • as

...

  • a

...

  • Set,

...

  • List,

...

  • or

...

  • Map,

...

  • and

...

  • send

...

  • arbitrary

...

  • objects

...

  • as

...

  • keys

...

  • and

...

  • values.

...

  • Declare

...

  • a

...

  • base

...

  • exception

...

  • type

...

  • for

...

  • 'throws',

...

  • and

...

  • then

...

  • throw

...

  • other

...

  • exception

...

  • classes

...

  • that

...

  • derive

...

  • from

...

  • it.

...

  • Declare

...

  • an

...

  • interface

...

  • or

...

  • an

...

  • abstract

...

  • type.

...

Aegis

...

can

...

handle

...

all

...

of

...

these.

...

For

...

all

...

except

...

interfaces,

...

there

...

are

...

two

...

mechanisms

...

that

...

involved:

...

the

...

root

...

class

...

list

...

and

...

xsi:type

...

attributes.

...

As

...

explained

...

above,

...

Aegis

...

can

...

write

...

'anything',

...

but

...

it

...

can

...

only

...

read

...

objects

...

of

...

types

...

that

...

are

...

mapped.

...

You

...

must

...

give

...

Aegis

...

a

...

list

...

of

...

all

...

the

...

types

...

that

...

you

...

want

...

to

...

use

...

over

...

and

...

above

...

those

...

visible

...

from

...

the

...

service,

...

and

...

you

...

must

...

instruct

...

Aegis

...

to

...

send

...

xsi:type

...

attributes.

...

These

...

type

...

attributes

...

allow

...

Aegis

...

to

...

identify

...

the

...

type

...

of

...

these

...

additional

...

objects

...

and

...

look

...

them

...

up

...

in

...

the

...

mappings.

...

Interfaces

...

require

...

one

...

further

...

step.

...

Obviously,

...

Aegis

...

cannot

...

instantiate

...

(run

...

'new')

...

on

...

an

...

interface.

...

So

...

knowing

...

that

...

a

...

particular

...

XML

...

Schema

...

type

...

maps

...

to

...

an

...

interface

...

is

...

not

...

enough

...

information.

...

To

...

be

...

able

...

to

...

read

...

an

...

XML

...

element

...

that

...

corresponds

...

to

...

an

...

interface,

...

Aegis

...

must

...

know

...

a

...

'proxy

...

class'

...

that

...

implements

...

the

...

interface.

...

You

...

must

...

give

...

Aegis

...

a

...

mapping

...

from

...

interface

...

types

...

to

...

proxy

...

class

...

names.

...

How

...

does

...

this

...

work?

...

The

...

core

...

of

...

Aegis

...

is

...

the

...

AegisContext

...

class.

...

Each

...

AegisDatabinding

...

object

...

has

...

an

...

AegisContext.

...

(It

...

is

...

probably

...

not

...

possible

...

to

...

share

...

an

...

AegisContext

...

amongst

...

databindings.)

...

By

...

default,

...

AegisDatabinding

...

will

...

create

...

its

...

own

...

AegisContext

...

with

...

default

...

properties.

...

To

...

configure

...

additional

...

types,

...

as

...

well

...

control

...

other

...

options

...

that

...

we

...

will

...

examine

...

later

...

on,

...

you

...

must

...

create

...

the

...

AegisContext

...

for

...

yourself

...

and

...

specify

...

some

...

of

...

its

...

properties.

...

Then

...

you

...

pass

...

your

...

AegisContext

...

object

...

into

...

your

...

AegisDatabinding

...

object.

...

To

...

use

...

additional

...

classes

...

or

...

interfaces,

...

you

...

need

...

to

...

set

...

two

...

(or

...

three)

...

properties

...

of

...

your

...

AegisContext.

...

  • rootClasses is a collection of Java Class<?>

...

  • objects.

...

  • These

...

  • are

...

  • added

...

  • to

...

  • the

...

  • list

...

  • of

...

  • types

...

  • known

...

  • to

...

  • Aegis.

...

  • Aegis

...

  • will

...

  • create

...

  • a

...

  • mapping

...

  • for

...

  • each.

...

  • For

...

  • convenience,

...

  • there

...

  • is

...

  • a

...

  • rootClassNames

...

  • property

...

  • for

...

  • use

...

  • from

...

  • Spring.

...

  • writeXsiTypes is a boolean.

...

  • Set

...

  • it

...

  • to

...

  • true

...

  • to

...

  • send

...

  • xsi:type

...

  • attributes.

...

  • beanImplementationMap is a mapping from Class<?>

...

  • to

...

  • class

...

  • names.

...

  • Use

...

  • this

...

  • to

...

  • specify

...

  • proxy

...

  • classes

...

  • for

...

  • interfaces

...

  • (or

...

  • abstract

...

  • classes).

...

Global

...

Type

...

Creation

...

Options

...

There

...

are

...

a

...

few

...

global

...

options

...

to

...

the

...

default

...

type

...

mapping

...

process.

...

You

...

can

...

control

...

these

...

by

...

creating

...

a

...

org.apache.cxf.aegis.type.TypeCreationOptions

...

and

...

passing

...

it

...

into

...

your

...

AegisContext

...

object.

...

There

...

are

...

four

...

properties

...

in

...

the

...

class,

...

of

...

which

...

two

...

are

...

much

...

more

...

commonly

...

used.

...

  • defaultNillable defines the default value of the nillable attribute of xsd:element

...

  • items

...

  • in

...

  • the

...

  • xsd:sequences

...

  • built

...

  • for

...

  • non-primitive

...

  • types.

...

  • By

...

  • default

...

  • it

...

  • is

...

  • true

...

  • since

...

  • any

...

  • Java

...

  • reference

...

  • can

...

  • be

...

  • null.

...

  • However,

...

  • nillable='true'

...

  • has

...

  • annoying

...

  • consequences

...

  • in

...

  • some

...

  • wsdl2java

...

  • tools

...

  • (turning

...

  • scalars

...

  • into

...

  • arrays,

...

  • e.g.),

...

  • and

...

  • so

...

  • many

...

  • programmers

...

  • prefer

...

  • to

...

  • default

...

  • to

...

  • false

...

  • .

...

  • defaultMinOccurs defines the default value of the minOccurs attribute of xsd:element

...

  • items

...

  • in

...

  • the

...

  • xsd:sequences

...

  • built

...

  • for

...

  • Java

...

  • arrays.

...

  • In

...

  • combination

...

  • with

...

  • nillable,

...

  • programmers

...

  • often

...

  • want

...

  • to

...

  • adjust

...

  • this

...

  • value

...

  • from

...

  • 0

...

  • to

...

  • 1

...

  • to

...

  • get

...

  • a

...

  • more

...

  • useful

...

  • mapping

...

  • of

...

  • an

...

  • array.

...

  • defaultExtensibleElements causes each sequence to end with an xsd:any.

...

  • The

...

  • idea

...

  • here

...

  • is

...

  • to

...

  • allow

...

  • for

...

  • schema

...

  • evolution;

...

  • a

...

  • client

...

  • that

...

  • has

...

  • generated

...

  • Java

...

  • from

...

  • one

...

  • version

...

  • of

...

  • the

...

  • service

...

  • will

...

  • tolerate

...

  • data

...

  • from

...

  • a

...

  • newer

...

  • version

...

  • that

...

  • has

...

  • additional

...

  • elements.

...

  • Use

...

  • this

...

  • feature

...

  • with

...

  • care;

...

  • version

...

  • management

...

  • of

...

  • web

...

  • services

...

  • is

...

  • a

...

  • complex

...

  • topic,

...

  • and

...

  • xsd:any

...

  • may

...

  • have

...

  • unexpected

...

  • consequences.

...

  • defaultExtensibleAttributes causes each element to permit any attribute. By default, Aegis doesn't map any properties or parameters to attributes. As with the element case, care is called for.

Note that these are options to the default type creators. If you take the step of creating a customized type creator, it will be up to you to respect or ignore these options.

Detailed Control of Bean Type Mapping

This page has descended, gradually, from depending on Aegis' defaults toward exercising more detailed control over the process. The next level of detail is to customize the default type creators' behavior via XML mapping files and annotations.

XML Mapping Files

XML mapping files are a major distinguishing feature of Aegis. They allow you to specify details of the mapping process without either (a) modifying your Java source for your types or (b) maintaining a central file of some kind containing mapping instructions.

Aegis XML mapping applies to services and to beans. By "beans," we mean "Java classes that follow the bean pattern, used in a web service." "Services," you ask? Aren't they the responsibility of the CXF front end? There is some overlap in the responsibilties of front-ends and databindings, and the Aegis front end can be used to configure the names and parameters of services. The present author is not sure what will happen in the event of a conflict between JAX-WS and Aegis. The Aegis service configuration is best used with the Simple front end.

For both bean and service customization, Aegis looks for customization in files found by the classloader. If your class is my.hovercraft.is.full.of.Eels,

...

Aegis

...

will

...

search

...

the

...

classpath

...

for

...

/my/hovercraft/is/full/of/Eels.aegis.xml.

...

In

...

other

...

words,

...

if

...

Eels.class

...

is

...

sitting

...

in

...

a

...

JAR

...

file

...

or

...

a

...

directory,

...

Eels.aegis.xml

...

can

...

be

...

sitting

...

right

...

next

...

to

...

it.

...

Or,

...

on

...

the

...

other

...

hand,

...

it

...

can

...

be

...

in

...

a

...

completely

...

different

...

JAR

...

or

...

tree,

...

so

...

long

...

as

...

it

...

ends

...

up

...

in

...

the

...

same

...

logical

...

location.

...

In

...

other

...

words,

...

you

...

can

...

create

...

XML

...

files

...

for

...

classes

...

when

...

you

...

don't

...

even

...

have

...

their

...

source.

This is a copy of the XML Schema for mapping XML files that is annotated with comments.

Bean mapping

Here is a very simple mapping. It takes a property named 'horse', renames it to 'feathers', and makes it an attribute instead of an element.

Code Block
xml
xml
 

[This|Annotated Aegis File Schema] is a copy of the XML Schema for mapping XML files that is annotated with comments.

h3. Bean mapping

Here is a very simple mapping. It takes a property named 'horse', renames it to 'feathers', and makes it an attribute instead of an element.

{code:xml}
<mappings>
  <mapping name="">
    <property name="horse" mappedName="Feathers" style="attribute"/>
  </mapping>
</mappings>
{code}

h4. Names and Namespaces

You can also specify the full QName of the bean itself. The following mapping causes a class to have the QName 

Names and Namespaces

You can also specify the full QName of the bean itself. The following mapping causes a class to have the QName {urn:north-pole:operations}Employee.

Code Block
xml
xml


{code:xml}
<mappings xmlns:np="urn:north-pole:operations">
  <mapping name="np:Employee">
  </mapping>
</mappings>
{code}

Notice

...

that

...

the

...

namespace

...

was

...

declared

...

on

...

the

...

mappings

...

element

...

and

...

then

...

the

...

prefix

...

was

...

used

...

to

...

specify

...

the

...

element

...

QNames

...

for

...

the

...

name/title

...

properties.

...

This

...

will

...

result

...

in

...

a

...

mapping

...

like

...

so:

Code Block
xml
xml


{code:xml}
<np:Employee xmlns:np="urn:north-pole:operations">
  <np:Name>Santa Claus</np:Name>
  <np:Title>Chief Present Officer (CPO)</np:Title>
</np:Employee>
{code}

h4. Ignoring properties

If you 

Ignoring properties

If you don't

...

want

...

to

...

serialize

...

a

...

certain

...

property

...

it

...

is

...

easy

...

to

...

ignore

...

it:

Code Block
xml
xml


{code:xml}
<mappings>
  <mapping>
    <property name="propertyName" ignore="true"/>
  </mapping>
</mappings>
{

MinOccurs and Nillable

The default Aegis mapping is to assume that, since any Java object can be null, that the corresponding schema elements should have minOccurs of 0 and nillable of true. There are properties on the mappings for to control this.

Code Block
xml
xml
code}

h4. MinOccurs and Nillable

The default Aegis mapping is to assume that, since any Java object can be null, that the corresponding schema elements should have minOccurs of 0 and nillable of true. There are properties on the mappings for to control this.

{code:xml}
<mappings>
  <mapping>
    <property name='everpresentProperty' minOccurs='1' nillable='false'/>
 </mapping>
<mappings>
{code}

h4. Alternative Type Binding

Later on, we will explain how to replace the default mappings that Aegis provides for basic types. However, thre are some cases where you may want to simply specify one of the provided type mappings for one of your properties. You can do that from the XML mapping file without creating any Java customization.

By default, for example, if Aegis maps a property as a Date, it uses the XML schema type xsd:dateTime. Here is an example that uses xsd:date, instead.

{code:xml}

Alternative Type Binding

Later on, we will explain how to replace the default mappings that Aegis provides for basic types. However, thre are some cases where you may want to simply specify one of the provided type mappings for one of your properties. You can do that from the XML mapping file without creating any Java customization.

By default, for example, if Aegis maps a property as a Date, it uses the XML schema type xsd:dateTime. Here is an example that uses xsd:date, instead.

Code Block
xml
xml
<mappings xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<mapping>
		<property name="birthDate" 
			type="org.apache.cxf.aegis.type.basic.DateType" 
			typeName="xsd:date"
			/>
	</mapping>
</mappings>
{code}

h4. Collections

If you use a 

Collections

If you use a 'raw'

...

collection

...

type,

...

Aegis

...

will

...

map

...

it

...

as

...

a

...

collection

...

of

...

xsd:any

...

particles.

...

If

...

you

...

want

...

the

...

WSDL

...

to

...

show

...

it

...

as

...

a

...

collection

...

of

...

some

...

specific

...

type,

...

the

...

easiest

...

thing

...

to

...

do

...

is

...

to

...

use

...

Java

...

generics

...

instead

...

of

...

raw

...

types.

...

If,

...

for

...

some

...

reason,

...

you

...

can't

...

do

...

that,

...

you

...

can

...

use

...

the

...

componentType

...

and

...

keyType

...

attributes

...

of

...

a

...

property

...

to

...

specify

...

the

...

Java

...

classes.

Multiple mappings for Different Services

What if you want to specify different mapping behavior for different services on the same types? The 'mapping' element of the file accepts a 'uri' attribute. Each AegisContext has a 'mappingNamespaceURI' attribute. If a mapping in a .aegis.xml file has a uri attribute, it must match the current service's uri.

Services and Parameters

For a service, mapping files specify attributes of operations and parameters.

This example specifies that getUnannotatedStrings returns a return element names UnannotatedStringCollection which is a raw collection of String values. It then specifies the first parameter of getValues is also a raw collection of String values.

Code Block
xml
xml
 

h4. Multiple mappings for Different Services

What if you want to specify different mapping behavior for different services on the same types? The 'mapping' element of the file accepts a 'uri' attribute. Each AegisContext has a 'mappingNamespaceURI' attribute. If a mapping in a .aegis.xml file has a uri attribute, it must match the current sercice's uri.

h3. Services and Parameters

For a service, mapping files specify attributes of operations and parameters.

This example specifies that getUnannotatedStrings returns a return element names UnannotatedStringCollection which is a raw collection of String values. It then specifies the first parameter of getValues is also a raw collection of String values.

{code:xml}
<mappings>
	<mapping>
		<method name="getUnannotatedStrings">
			<return-type name="UnannotatedStringCollection" componentType="java.lang.String"/>
		</method>
        <method name="getValues">
         <parameter index="0" componentType="java.lang.String"/>
        </method>
	</mapping>
</mappings>
{code}

h2. Annotations 

Like 

Annotations

Like JAXB,

...

Aegis

...

supports

...

some

...

Java

...

annotations

...

to

...

control

...

the

...

mapping

...

process.

...

These

...

attributes

...

are

...

modelled

...

after

...

JAXB.

...

Aegis

...

defines

...

them

...

in

...

the

...

package

...

org.apache.cxf.aegis.type.java5.

...

They

...

are:

  • XmlAttribute
  • XmlType
  • XmlElement
  • XmlReturnType
  • XmlIgnore

In addition, Aegis will respect actual JAXB annotations from the following list:

  • javax.jws.WebParam

...

  • javax.jws.WebResult

...

  • javax.xml.bind.annotation.XmlAttribute

...

  • javax.xml.bind.annotation.XmlElement

...

  • javax.xml.bind.annotation.XmlSchema

...

  • javax.xml.bind.annotation.XmlType

...

  • javax.xml.bind.annotation.XmlTransient

...

Note,

...

however,

...

that

...

Aegis

...

goes

...

not

...

handle

...

package-info.java

...

classes,

...

and

...

so

...

XmlSchema

...

must

...

be

...

applied

...

to

...

a

...

class.

...

Creating

...

Your

...

Own

...

Type

...

Mappings

...

If

...

you

...

want

...

complete

...

control

...

on

...

the

...

mapping

...

between

...

Java

...

and

...

XML,

...

you

...

must

...

create

...

your

...

own

...

type

...

mappings.

...

To

...

do

...

this,

...

you

...

should

...

make

...

a

...

class

...

that

...

extends

...

org.apache.cxf.aegis.type.Type,

...

and

...

then

...

you

...

must

...

register

...

it

...

in

...

a

...

type

...

mapping

...

for

...

your

...

service.

...

To

...

see

...

how

...

these

...

classes

...

work,

...

read

...

the

...

source

...

code.

...

To

...

register

...

your

...

type

...

mappings,

...

you

...

have

...

two

...

choices.

...

If

...

you

...

just

...

want

...

to

...

add

...

a

...

custom

...

type

...

mapping

...

into

...

your

...

service,

...

the

...

easiest

...

thing

...

to

...

do

...

is

...

to

...

retrieve

...

the

...

TypeMapping

...

from

...

the

...

AegisContext,

...

and

...

register

...

your

...

type

...

as

...

a

...

mapping

...

from

...

Class<?>

...

to

...

your

...

custom

...

mapping

...

object.

...

If

...

you

...

want

...

complete

...

control

...

over

...

the

...

process,

...

you

...

can

...

create

...

your

...

own

...

TypeMapping.

...

The

...

class

...

DefaultTypeMapping

...

is

...

the

...

standard

...

type

...

map.

...

You

...

can

...

use

...

these,

...

or

...

you

...

can

...

create

...

your

...

own

...

implementation

...

of

...

TypeMapping.

...

Set

...

up

...

your

...

type

...

mapping

...

as

...

you

...

like,

...

and

...

install

...

it

...

in

...

your

...

context

...

before

...

the

...

service

...

is

...

initialized.

...

Customizing

...

Type

...

Creation

...

What

...

if

...

you

...

want

...

to

...

change

...

how

...

Aegis

...

builds

...

new

...

type

...

mappings

...

and

...

types

...

from

...

Java

...

classes?

...

You

...

can

...

create

...

your

...

own

...

TypeCreator,

...

and

...

either

...

put

...

it

...

in

...

the

...

front

...

of

...

the

...

list

...

of

...

type

...

creators

...

or

...

replace

...

the

...

entire

...

standard

...

list.

...

As

...

with

...

type

...

mappings,

...

reading

...

the

...

source

...

is

...

the

...

only

...

way

...

to

...

learn

...

the

...

details.

...

Type

...

creators

...

are

...

associated

...

with

...

type

...

mappings;

...

you

...

can

...

call

...

setTypeCreator

...

on

...

an

...

instance

...

of

...

DefaultTypeMapping

...

to

...

install

...

yours.

...