Code centricity is a fine approach if your goal is to use SOAP as a slower
replacement for RMI -- producing tightly coupled Java-centric distributed
object applications. (But why not just use RMI?)

If your goal is to develop language-independent, flexible, loosely coupled,
document-oriented, SOA environments, then you should take a WSDL-centric
approach.

Anne 

-----Original Message-----
From: Joe Plautz [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, November 16, 2004 7:00 PM
To: [EMAIL PROTECTED]
Subject: Re: Best Practice

Be code centric as opposed to WSDL centric. With Axis we can expose our 
code in a relatively easy manner without the need of creating a WSDL 
first which is perfect.


Anne Thomas Manes wrote:
> I'm thinking about reusability. 
> 
> Picture yourself a couple of years from now when your company has a few
> thousand services deployed. Like most companies you have about half dozen
or
> so data structures that represent customer information. And now you want
to
> find services that use a particular "customer" format. 
> 
> If you have defined each of your various customer formats as separate
> schemas, then each customer element has a unique Qname, at which point you
> can search for services that use the abc:Customer as opposed to the
> xyz:Customer. 
> 
> If you have defined the customer element repeatedly in every web service,
> you have no way to search for services that use one format versus another
> without doing a detailed analysis of each WSDL file.  
> 
> Anne
> 
> -----Original Message-----
> From: Anand Natrajan [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, November 16, 2004 1:19 PM
> To: [EMAIL PROTECTED]
> Subject: RE: Best Practice
> 
> While I understand the attraction to factor out common definitions into a
> separate schema file, I am a bit conflicted about the use of schema files
> within a WSDL for describing a service.
> 
> If your WSDL imports a schema, you can no longer hand out a single file to
> your customers and ask them to generate clients for your service; you must
> hand out the schema files as well. Giving out multiple files seems clunky.
> 
> Some of you may counter that I shouldn't be pamphleteering my WSDLs
directly
> anyway; customers should use the service URL followed by "?wsdl" or some
> such device to get at the WSDL. While such devices may resolve imports (if
> they do), that doesn't solve the problem entirely. What if my service is
> published redundantly, i.e., what if multiple servers can serve a client?
> 
> In such cases, the customer could copy over the WSDL, change the service
URL
> to reflect another server and access the service. Ah, but now, the
customer
> has a version of the WSDL that is different from what I have on the server
> side, which could lead to interoperability problems later.
> 
> So what's my approach? Much as there is talk about writing WSDLs first, I
> prefer generating them automatically. I can do all the refactoring I want
in
> my Java code and trust the java2wsdl generator to generate non-import
WSDLs.
> Except for cosmetic changes (copyrights, formatting, etc.) I don't touch
the
> WSDLs after that. This way I can control what WSDL the server and clients
> use.
> 
> Perhaps my approach is heresy. If it is, I'd like to know how my concerns
> can be countered. Thanks!
> 
> Anand
> 
> On Tue, 16 Nov 2004, Anne Thomas Manes wrote:
> 
> : Technically, an "import" is importing a namespace, not the schema or
WSDL
> : file that creates the namespace.
> : The WS-I Basic Profile says that you must not coerce (i.e., change) the
> : namespace name during import:
> : 5.1.9 Namespace Coercion
> : Namespace coercion on wsdl:import is disallowed by the Profile.
> : R2005 The targetNamespace attribute on the wsdl:definitions element of a
> : description that is being imported MUST have same the value as the
> namespace
> : attribute on the wsdl:import element in the importing DESCRIPTION.
> :
> : In other words, if the imported WSDL file has a target namespace of
> : "urn:foo", when you import it, you must do so by saying:
> :    <wsdl:import namespace="urn:foo" location="http://foo-url"; />
> : and you can't change the namespace to
> :    <wsdl:import namespace="urn:foobar" location="http://foo-url"; />
> :
> : In addition, you must declare the namespace to reference any elements
> within
> : the namespace:
> :   xmlns:foo="urn:foo"
> :
> : The same goes for schema imports.
> :
> : Anne
> :
> :   _____
> :
> : From: HG [mailto:[EMAIL PROTECTED]
> : Sent: Tuesday, November 16, 2004 8:57 AM
> : To: [EMAIL PROTECTED]
> : Subject: Re: Best Practice
> :
> : Hi Anne
> :
> : Thanx for your fantastic reply/comments on this post. They really makes
> : sence.
> :
> : Actually I used your suggestions already (maybe without knowing it ??!)
on
> a
> : small-sized project where I only had one xsd file for all types. The
whole
> : "domain model" in one file.
> :
> : BTW, do you know that WS-I Basic Profile suggests according to schema
> : imports and wsdl imports in respect to namespaces.?
> :
> : /Henrik
> :
> : ----- Original Message -----
> : From: Anne Thomas Manes <mailto:[EMAIL PROTECTED]>
> : To: [EMAIL PROTECTED]
> : Sent: Tuesday, November 16, 2004 2:45 PM
> : Subject: RE: Best Practice
> :
> : Typically I prefer not to use a bunch of different schemas with a
service
> : (e.g., one schema for each element and type). In order to reference an
> : element (or type) from one schema (a) in another schema (b), you must
> : explicitly import the (a) schema (and define a namespace declaration)
into
> : the (b) schema using <xsd:import>. Likewise, if the (b) schema needs to
> : reference an element or type from the (a) schema, you must also
explicitly
> : import the (a) schema in the (b) schema. So using lots of separate
schemas
> : requires lots of schema imports.
> :
> : I suggest you factor schemas into the appropriate sizes to support your
> : requirements for reusability. In other words, if you plan to use a
> : particular element (or type) in a number of different applications,
> : combining the element with a different set of elements in each
> application,
> : then it makes sense to define it in a separate schema. But if you
> typically
> : use that element with the same group of elements in most of your
> : applications, then you probably want to define them in the same schema.
> :
> : My recommendation, therefore, is to define your service's data elements
> : (customer, purchase order, etc) and their types in a single schema
unless
> : you have a compelling reason to factor them into separate schemas.
> :
> : I also recommend that you follow Henrik's advice to define your
service's
> : input and output message elements in a separate schema from your data
> : element schema. (You will need to <xsd:import> your data element schema
> into
> : the message element schema.) If the particular set of message elements
> will
> : be used only by your service, then you can define them within the
<types>
> : section of your WSDL. (This situation is reasonably typical because the
> : input message element usually has the same name as the operation so
tends
> to
> : be pretty unique to the particular service). But if you anticipate that
> you
> : may have multiple services that wish to exchange the same messages, then
> you
> : probably want to factor the message elements into a standalone schema. I
> : suspect you're more likely to reuse fault messages than input and output
> : messages, so it makes sense to factor fault messages into a separate
> schema.
> :
> :
> : Note that a WSDL document may have at most only one <types> section, so
> you
> : can't <wsdl:import> multiple types sections into a WSDL document. If you
> : want to import multiple schemas, you must import them from within your
> : <types> section, and you must use <xsd:import> to do so.
> :
> : Regards,
> : Anne
> :
> :
> :   _____
> :
> : From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> : Sent: Tuesday, November 16, 2004 7:46 AM
> : To: [EMAIL PROTECTED]
> : Subject: Re: Best Practice
> :
> : Thanks, Henrik.
> : That's the sort of thing I'm after.
> : I couldn't quite work out the difference between 1 and 2, though. In 1,
> you
> : are defining the messages for the service methods and this naturally
> : includes the parameters of the methods. In 2, it seems you're doing the
> same
> : thing again (except for the message elements themselves).
> : When importing, are you referring to WSDL imports or XML schema imports?
> We
> : have some services that define a schema in the <types> element and
import
> : another schema, in the <types> element also. The latest SOAPscope
doesn't
> : like this, unless the imported schema is imported within the schema
which
> : references its types. Just thought I'd mention it (XMLSpy, doesn't
mind).
> : Keep it coming!
> : Tony
> :
> :
> : Hi Tony
> :
> : I have a few...Some on this list might disagree, but it is always nice
> with
> : a discussion.
> :
> : I have done this, on several projects, and it works very well,
especially
> : for interop.
> : The main point is: Use Schemas
> :
> : 1.
> : Define a schema for each message you want your webservice to process.
> : Lets call these schemas for message-schemas.
> :
> : 1 a)
> : Typically a "call" to a webservice consists of some input message and
> maybe
> : some output message. Define a schema for both.
> : 1 b)
> : When you define the schema for the messages, the "value objects" will
> : logically appear to you. Value objects in this context is types (defined
> in
> : schemas) for parameters you pass in the message and return values of the
> : message.
> :
> : Outcome of 1:
> : You have a schema for each webservice that exactly defines
> request/response
> : messages for each web service method.
> :
> : 2.
> : As pointed out in 1 b) schemas for the parameter/return types can/must
> also
> : be defined. This might be an Order type, Customer type, etc.
> : Lets call these schemas for type-schemas.
> : 2 a)
> : Define these parameter/return types in a schema, too.
> :
> : Outcome of 2:
> : You have a schema (or all in one schema) for each parameter/return type
> that
> : each webservice method must be able to process.
> : Over time you'll have a "domain model" of types/classes described in
> : schemas.
> :
> : 3.
> : Use imports between schemas (both type-schemas and message-schemas) to
> : construct your WSDL document.
> : a) Import type-schemas in your message-schemas as needed by
> parameter/return
> : types.
> : b) Import message-schemas in your WSDL document as needed.
> :
> : Outcome of all three:
> : - You have a clean separation and description (in terms of schemas) of
the
> : services a webservice provides and the "types of data" these service
> : operates on.
> : - Your WSDL doesn't get cluttered with types
> :
> : Anyone... comments on these steps are welcome...
> :
> : Regards
> :
> : Henrik
> :
> 
> .
> 

Reply via email to