Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/Examples/DBWS/DBWSIntermediateAttribute"
(→User-Provided NamingConventionTransformer) |
|||
Line 41: | Line 41: | ||
=== User-Provided NamingConventionTransformer === | === User-Provided NamingConventionTransformer === | ||
It is possible to change an <element-tag> to an "attribute" with a custom transformer. The user sub-classes <tt>o.e.p.tools.dbws.DefaultNamingConventionTransformer</tt>. For example, for the table <code>SIMPLE_TABLE</code> | It is possible to change an <element-tag> to an "attribute" with a custom transformer. The user sub-classes <tt>o.e.p.tools.dbws.DefaultNamingConventionTransformer</tt>. For example, for the table <code>SIMPLE_TABLE</code> | ||
− | <source lang=sql | + | <source lang=sql enclose="div"> |
CREATE TABLE SIMPLE_TABLE ( | CREATE TABLE SIMPLE_TABLE ( | ||
ID NUMERIC NOT NULL, | ID NUMERIC NOT NULL, |
Revision as of 13:27, 3 June 2009
Naming Convention for schema elements
As seen in the Basic Table example, the DBWSBuilder-generated eclipselink-dbws-schema.xsd file derives <element-tag> names from the Database table metadata:
<xsd:schema
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="empType">
<xsd:sequence>
<xsd:element name="empno" type="xsd:int" xsi:nil="false"/>
<xsd:element name="ename" type="xsd:string" xsi:nil="true"/>
<xsd:element name="job" type="xsd:string" xsi:nil="true"/>
<xsd:element name="mgr" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="hiredate" type="xsd:dateTime" xsi:nil="true"/>
<xsd:element name="sal" type="xsd:decimal" xsi:nil="true"/>
<xsd:element name="comm" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="deptno" type="xsd:int" xsi:nil="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Converting the database metadata into the names of <element-tag>'s is the job of o.e.p.tools.dbws.NamingConventionTransformer
's
public interface NamingConventionTransformer { public enum ElementStyle { ELEMENT, ATTRIBUTE, NONE }; public String generateSchemaName(String tableName); public String generateElementAlias(String originalElementName); public ElementStyle styleForElement(String originalElementName); }
In the eclipselink-dbwsutils.jar, the built-in transformers form a Chain-of-Responsibility
In the o.e.p.tools.dbws.NamingConventionTransformer services file, the transformer chain is listed in order:
|
+---META-INF
| | MANIFEST.MF
| |
| \---services
| org.eclipse.persistence.tools.dbws.NamingConventionTransformer
contains 3 lines:
org.eclipse.persistence.tools.dbws.ToLowerTransformer
org.eclipse.persistence.tools.dbws.TypeSuffixTransformer
org.eclipse.persistence.tools.dbws.SQLX2003Transformer
User-Provided NamingConventionTransformer
It is possible to change an <element-tag> to an "attribute" with a custom transformer. The user sub-classes o.e.p.tools.dbws.DefaultNamingConventionTransformer. For example, for the table SIMPLE_TABLE
ID NUMERIC NOT NULL,
NAME VARCHAR(25),
SINCE DATE,
PRIMARY KEY (ID)
)
The following NamingConventionTransformer<code> will:
- name the schema element 'simple'
- make the element names lowercase
- have the ID field represented as an attribute, and
- skip the SINCE field
import org.eclipse.persistence.tools.dbws.DefaultNamingConventionTransformer; import static org.eclipse.persistence.tools.dbws.NamingConventionTransformer.ElementStyle.ATTRIBUTE; import static org.eclipse.persistence.tools.dbws.NamingConventionTransformer.ElementStyle.ELEMENT; import static org.eclipse.persistence.tools.dbws.NamingConventionTransformer.ElementStyle.NONE; public class MyNamingConventionTransformer extends DefaultNamingConventionTransformer { @Override public String generateSchemaAlias(String tableName) { return super.generateSchemaAlias("simple"); } @Override public String generateElementAlias(String originalElementName) { return super.generateElementAlias(originalElementName.toLowerCase()); } @Override public ElementStyle styleForElement(String elementName) { if ("id".equalsIgnoreCase(elementName)) { return ATTRIBUTE; } else if ("since".equalsIgnoreCase(elementName)) { return NONE; } return ELEMENT; } }