[jboss-dev-forums] [Design of POJO Server] - Whitespace trimming in metadata

adrian@jboss.org do-not-reply at jboss.com
Mon Jun 16 09:39:36 EDT 2008


Currently we have a failing test because whitespace is not getting
trimmed from a jndi-name. NOTE there is an extra space after SessionA


  | 2008-06-16 14:38:33,596 DEBUG [org.jboss.test.naming.ejb.TestEjbLinkBean] (WorkerThread#0[127.0.0.1:54701]) failed
  | javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: SessionA  not bound]
  |         at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1254)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:767)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:776)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:629)
  |         at javax.naming.InitialContext.lookup(InitialContext.java:351)
  |         at org.jboss.test.naming.ejb.TestEjbLinkBean.testEjbLinkCaller(TestEjbLinkBean.java:74)
  | 

This is coming from the following jboss.xml

  | <?xml version="1.0" encoding="UTF-8"?>
  | <!DOCTYPE jboss PUBLIC
  |       "-//JBoss//DTD JBOSS 4.0//EN"
  |       "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
  | 
  | <jboss>
  |   <enterprise-beans>
  |     <session>
  |        <ejb-name>SessionB</ejb-name>
  |        <jndi-name>naming/SessionB</jndi-name>
  | 
  |        <ejb-ref>
  |          <ejb-ref-name>ejb/NoLinkSessionA</ejb-ref-name>
  |          <jndi-name>naming/SessionA </jndi-name>
  |        </ejb-ref>
  | 
  |        <ejb-local-ref>
  |          <ejb-ref-name>ejb/NoLinkLocalSessionA</ejb-ref-name>
  |          <local-jndi-name>naming/local/SessionA</local-jndi-name>
  |        </ejb-local-ref>
  | 
  |     </session>
  |   </enterprise-beans>
  | </jboss>
  | 

In our jboss.xml schema, jndi-name inhertis eventually from the simple xml type
xsd:name
which has a facet defined that says to normalise space.

However, in the dtd (used above), jndi-name is just defined as #PCDATA

But correcting the schema/dtd types wouldn't be the complete fix if
xml validation is turned off since then it wouldn't look at the dtd/schema anyway.

What I'd suggest is that we introduce a convenience annotation
so you can specify whether whitespace should be preserved at the shema level,
e.g. something like

  | @XmlRootElement(name="jboss", namespace=JavaEEMetaDataConstants.JBOSS_NS)
  | @JBossXmlSchema(
  |       xmlns={@XmlNs(namespaceURI = JavaEEMetaDataConstants.JAVAEE_NS, prefix = "jee")},
  |       ignoreUnresolvedFieldOrClass=false,
  |       namespace=JavaEEMetaDataConstants.JBOSS_NS,
  |       elementFormDefault=XmlNsForm.QUALIFIED,
  | 
  | // HERE
  |       normaliseSpace=true)
  | 
  | @XmlType(name="jbossType", namespace=JavaEEMetaDataConstants.JBOSS_NS)
  | public class JBoss50MetaData extends JBossMetaData
  | 

With the option on paricular elements/attributes to do
@XmlPreserveWhitespace

This would then more easily map to what we used to do in the old parsing
where it trimmed everything (from the old org.jboss.metadata.MetaData utility class)

  |    public static String getElementContent(Element element, String defaultStr, boolean replace)
  |    {
  |       if (element == null)
  |          return defaultStr;
  | 
  |       NodeList children = element.getChildNodes();
  |       String result = "";
  |       for (int i = 0; i < children.getLength(); i++)
  |       {
  |          if (children.item(i).getNodeType() == Node.TEXT_NODE || 
  |              children.item(i).getNodeType() == Node.CDATA_SECTION_NODE)
  |          {
  |             result += children.item(i).getNodeValue();
  |          }
  |          else if( children.item(i).getNodeType() == Node.COMMENT_NODE )
  |          {
  |             // Ignore comment nodes
  |          }
  |          else
  |          {
  |             result += children.item(i).getFirstChild();
  |          }
  |       }
  | 
  | // HERE
  | 
  |       if (replace)
  |          return StringPropertyReplacer.replaceProperties(result.trim());
  |       else
  |          return result.trim();
  |    }
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4158353#4158353

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4158353



More information about the jboss-dev-forums mailing list