<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Communardo Techblog &#187; XML-Schema</title>
	<atom:link href="http://www.communardo.de/home/techblog/tag/xml-schema/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.communardo.de/home/techblog</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jul 2010 12:18:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sharepoint: AddFieldAsXml Bug oder internalName != displayName</title>
		<link>http://www.communardo.de/home/techblog/2009/08/31/sharepoint-addfieldasxml-bug-oder-internalname-displayname/</link>
		<comments>http://www.communardo.de/home/techblog/2009/08/31/sharepoint-addfieldasxml-bug-oder-internalname-displayname/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 06:53:51 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[XML-Schema]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=1848</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p style="text-align: left">Beim programmatischen Erstellen von benutzerdefinierten Spalten (SPField) in Sharepoint sind einige Dinge zu beachten und erwarten auch beachtet zu werden. H&#228;lt man sich jedoch an die Spielregeln (API Dokumentation) und erzielt trotzdem nicht das gew&#252;nschte Ergebniss, ist wahrscheinlich wieder ein Sharepoint Bug gefunden worden.  Dies musste ich heute wieder mal schmerzhaft feststellen.</p>
<p>Sharepoint verwendet zwei Namen um Felder zu kennzeichnen. Den internalName sowie den <em>displayName</em> (bzw. Title). Der <em>internalName</em> wird  von Sharepoint selbst sowie von dem Sharepoint Objekt Modell verwendet um Spalten(SPField) und Objekte wieder zu erkennen und anzusprechen.  Der <em>displayName</em> und die Title &#8211; Eigenschaft werden verwendet um die Darstellung der Spalten zu steueren. So k&#246;nnen eindeutige Namen Verwendung finden um Objekte eindeutig  anzusprechen. Gleichzeitig kann der Anzeigename variabel gestaltet werden.</p>
<p>So hatte ich versucht eine Sharepoint Spalte &#252;ber die API zu erstellen und anschlie&#223;end zur SPFieldCollection einer Liste  hinzuzuf&#252;gen.<br />
Dies funktionierte mit den folgenden Codeschnipseln auch sehr gut.</p>
<blockquote>
<pre><span style="color: #ff0000">SPField currField = colFields.CreateNewField(SPFieldTypeString, displayName);
currField.staticName = internalName;
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);</span></pre>
</blockquote>
<p>Anschlie&#223;end beim Beschreiben der Spalte gingen jedoch die Probleme los.</p>
<blockquote>
<pre><span style="color: #ff0000">SPField newField = newItem.Fields.GetFieldByInternalName(internalFieldName);</span></pre>
</blockquote>
<p>Laut  API Dokumentation und <a title="MSDN" href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfield.staticname.aspx" target="_blank">MSDN</a> welche besagt, dass der <em>staticName</em> dazu dient, um den<em> internalName</em> zu setzen, w&#228;re der  obige Programm &#8211; Code richtig. (&#8220;Gets or sets the internal name of the field.&#8221;)</p>
<p>Das Ausf&#252;hren der Methode verursachte eine ArgumentException mit der Meldung: Value does not fall within the expected range.</p>
<p>Darfaufhin begann ich ein wenig weiter zu forschen (Danke an <a title="Sharepoint Manager" href="http://www.codeplex.com/spm" target="_blank">Sharepoint Manager</a>) und fand herraus, dass die AddFieldAsXml Methode in Verbindung mit einem SPField welches mit CreateNewField erzeugt wurde einen Bug von Sharepoint hervorruft. AddFieldAsXml setzt den <em>displayName</em> wie angegeben,  aber leider auch den <em>internalName</em> mit dem Wert des display Namens. Das hat zur Folge, dass die Spalten nicht mehr &#252;ber den <em>interalName</em> ansprechbar sind.</p>
<p>Wer jetzt also vor genau diesem Problem stehen sollte, hat zwei schnelle M&#246;glichkeiten.</p>
<ol>
<li>Die Guid des Feldes speichern und verwenden sofern der Zugriff auf diese besteht.<br />
Mit Hilfe dieser kann eine Sharepoint Spalte sicher bestimmt werden.</li>
<li>Folgenden Workaround verwenden.</li>
</ol>
<p><strong><span style="text-decoration: underline">Workaround:</span></strong></p>
<p>Die L&#246;sung des Problems ist regelrecht simpel. Es wird der gleiche obige Code verwendet um das SPField zu erstellen, jedoch als<em> displayName</em> der <em> internalName </em>gesetzt. Dadurch legt Sharepoint die Spalte mit dem richtigen <em>internalName</em> an. Sobald die Spalte angelegt wurde, muss nur noch der<em> displayName </em>ge&#228;ndert werden.</p>
<blockquote>
<pre><span style="color: #ff0000">string internalName = "internerName";
string displayName = "displayName";
SPField currField = colFields.CreateNewField(SPFieldTypeString, internalName);
colFields.AddFieldAsXml(currField.SchemaXml, true, SPAddFieldOptions.AddToAllContentTypes);
SPField rewriteField = colFields[internalName];
rewriteField.Title = displayName;
rewriteField.Update();</span></pre>
</blockquote>
<p>Wird die <em>GetField-</em> oder <em>GetFieldByInternalName</em> -  Methode jetzt mit dem internalName aufgerufen liefert sie die gew&#252;nschte Spalte.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/08/31/sharepoint-addfieldasxml-bug-oder-internalname-displayname/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XMLBeans in Axis2</title>
		<link>http://www.communardo.de/home/techblog/2008/01/21/xmlbeans-in-axis2/</link>
		<comments>http://www.communardo.de/home/techblog/2008/01/21/xmlbeans-in-axis2/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 09:06:43 +0000</pubDate>
		<dc:creator>Alexander Stephan</dc:creator>
				<category><![CDATA[JEE]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[axis2]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[XML-Schema]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/21/xmlbeans-in-axis2/</guid>
		<description><![CDATA[<img alt="ast" src="http://www.gravatar.com/avatar.php/afa7ba3c4fc4feedabd75067db37f9ad/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/ast/" title="Artikel von Alexander Stephan">Alexander Stephan</a><p>Da es sich bei Axis2 um eine Neuentwicklung gegen&#252;ber der Vorg&#228;ngerversion handelt, wurde ein komplett anderes Data Binding Konzept umgesetzt. Zum Einsatz kommen bestehende L&#246;sungen wie:</p>
<ul>
<li><strong>ADB,</strong> (<a href="http://ws.apache.org/axis2/1_0/adb/adb-howto.html">http://ws.apache.org/axis2/1_0/adb/adb-howto.html)</a></li>
<li><strong>XMLBean, (</strong><a href="http://xmlbeans.apache.org/">http://xmlbeans.apache.org</a> )</li>
<li><strong>JiBX, (</strong><a href="http://jibx.sourceforge.net/">http://jibx.sourceforge.net/ )</a></li>
<li><strong>JAXB-RI</strong>, (<a href="https://jaxb.dev.java.net/nonav/2.1.6/docs/vendorCustomizations.html">https://jaxb.dev.java.net/</a><a href="https://jaxb.dev.java.net/nonav/2.1.6/docs/vendorCustomizations.html">nonav/2.1.6/docs/vendorCustomizations.html )</a></li>
<li><strong>oder JaxME, (</strong><a href="http://ws.apache.org/jaxme/">http://ws.apache.org/jaxme/ )</a></li>
</ul>
<p>die in Axis2 integriert werden. XMLBeans stammen urspr&#252;nglich von BEA Systems und wird von Apache weiterentwickelt. XMLBeans heben den Informationsgehalt eines XML-Infosets w&#228;hrend der Verarbeitung auf, so dass Metadaten zur Verf&#252;gung stehen, die bspw. f&#252;r eine Schema-Validierung genutzt werden k&#246;nnen. Wenn XMLBeans als Data Binging genutzt werden sollen, muss &#8220;-d xmlbeans&#8221; als Parameter angegeben werden. (Defaultwert ist ADB):</p>
<blockquote><p><code>WSDL2JAVA ... -d xmlbeans  meine.wsdl</code></p></blockquote>
<p>Das Framework generiert f&#252;r jeden benutzerdefinierten Datentyp eine Interfaceklasse, mit der man bei der Entwicklung in Ber&#252;hrung kommt. Alle Interfaces erben von XMLObject und erhalten eine interne statische Inner Class &#8220;Factory&#8221; mit der eine Klasse des jeweiligen Types erzeugt werden kann. Beispiel zur Erzeugung eines Objektes vom Typ Kunde:</p>
<blockquote><p><code>KundeDocument kundeDoc =  KundeDocument.Factory.newInstance();    </code></p></blockquote>
<p>Ein XML-Document kann &#252;ber die Methode &#8220;<em>save</em>&#8221; in ein XML-Format serialisiert werden. Mit &#8220;<em>xmlText</em>&#8221; wird ein String als XML zur&#252;ckgegeben.</p>
<blockquote><p><code>String kundeXml = kundeDoc.xmlText();</code></p></blockquote>
<blockquote><p><code>kundeDoc.save(new File("kundeDoc.xml"));</code></p></blockquote>
<p>Andere Data Bindings bilden Datantypen wie bspw. <em>xsd:String, xsd:Token, xsd:anyUrl</em> oder <em>xsd:Name</em> auf String ab. XMLBeans bietet hierf&#252;r eigene Datentypen, um die unterschiedlichen Wertebereiche und semantischen Bedeutung zu behalten.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2008/01/21/xmlbeans-in-axis2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAXB2-Bindings aus einer DTD mit Typmapping mit Maven2 generieren</title>
		<link>http://www.communardo.de/home/techblog/2007/08/24/jaxb2-bindings-aus-einer-dtd-mit-typmapping-mit-maven2-generieren/</link>
		<comments>http://www.communardo.de/home/techblog/2007/08/24/jaxb2-bindings-aus-einer-dtd-mit-typmapping-mit-maven2-generieren/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 14:16:16 +0000</pubDate>
		<dc:creator>Jan Dittberner</dc:creator>
				<category><![CDATA[JEE]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[dtd]]></category>
		<category><![CDATA[jaxb]]></category>
		<category><![CDATA[maven2]]></category>
		<category><![CDATA[XML-Schema]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2007/08/24/jaxb2-bindings-aus-einer-dtd-mit-typmapping-mit-maven2-generieren/</guid>
		<description><![CDATA[<img alt="jdi" src="http://www.gravatar.com/avatar.php/0d23d3c49d61a71b13dcadbe3605a453/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/jdi/" title="Artikel von Jan Dittberner">Jan Dittberner</a><p>Nach dem gestrigen <a href="http://www.communardo.de/techblog/2007/08/22/generierung-von-jaxb2-bindings-aus-einer-dtd-mit-maven2/">Erfolg</a> folgte heute eine Anforderung, die den Wechsel zu einem anderen Maven2-Plugin und einer neuen Mapping-Datei f&#252;hrte.</p>
<p>Die neue Anforderung war, dass Attribute aus der DTD auf andere Typen als String gemappt werden sollen. Da DTDs keine Typisierung wie XML-Schema kennen, muss dies mit einem Mapping-File geschehen. Das Maven2-Plugin aus dem gestrigen Artikel war leider mit dem Mapping der Attribute &#252;berfordert.</p>
<p>Jetzt wurde das <a href="https://maven-jaxb2-plugin.dev.java.net/">Maven2-JAXB-Plugin</a> von java.net verwendet, damit &#228;ndert sich die pom.xml folgenderma&#223;en:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</pre>
<pre>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;de.mms-dresden&lt;/groupId&gt;
  &lt;artifactId&gt;hsp-search-gen&lt;/artifactId&gt;
  &lt;name&gt;Hilfe- und Support-Portal generierter Code fuer die Suche&lt;/name&gt;
  &lt;version&gt;0.1-SNAPSHOT&lt;/version&gt;
  &lt;parent&gt;
    &lt;groupId&gt;de.mms-dresden&lt;/groupId&gt;
    &lt;artifactId&gt;hsp&lt;/artifactId&gt;
    &lt;version&gt;0.1-SNAPSHOT&lt;/version&gt;
  &lt;/parent&gt;
  &lt;description&gt;Generierter Code fuer die Suche im Hilfeportal&lt;/description&gt;
  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.jvnet.jaxb2.maven2&lt;/groupId&gt;
        &lt;artifactId&gt;maven-jaxb2-plugin&lt;/artifactId&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;goals&gt;
              &lt;goal&gt;generate&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
              &lt;generateDirectory&gt;${project.build.directory}/generated-sources/jaxb&lt;/generateDirectory&gt;
              &lt;extension&gt;true&lt;/extension&gt;
              &lt;schemaLanguage&gt;DTD&lt;/schemaLanguage&gt;
              &lt;schemaIncludes&gt;
                &lt;schemaInclude&gt;*.dtd&lt;/schemaInclude&gt;
              &lt;/schemaIncludes&gt;
              &lt;bindingIncludes&gt;
                &lt;bindingInclude&gt;*.jaxb&lt;/bindingInclude&gt;
              &lt;/bindingIncludes&gt;
              &lt;verbose&gt;true&lt;/verbose&gt;
              &lt;args&gt;
                &lt;arg&gt;-Xinject-listener-code&lt;/arg&gt;
              &lt;/args&gt;
            &lt;/configuration&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
        &lt;dependencies&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.jvnet.jaxb2-commons&lt;/groupId&gt;
            &lt;artifactId&gt;property-listener-injector&lt;/artifactId&gt;
            &lt;version&gt;1.0&lt;/version&gt;
          &lt;/dependency&gt;
        &lt;/dependencies&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;

  &lt;repositories&gt;
    &lt;repository&gt;
      &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
      &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
    &lt;/repository&gt;
  &lt;/repositories&gt;

  &lt;pluginRepositories&gt;
    &lt;pluginRepository&gt;
      &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
      &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
    &lt;/pluginRepository&gt;
  &lt;/pluginRepositories&gt;

  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;javax.xml.bind&lt;/groupId&gt;
      &lt;artifactId&gt;jaxb-api&lt;/artifactId&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/project&gt;</pre>
<p>Bei der Angabe der Repository-Pfade muss man aufpassen, weil die Angaben auf der <a href="https://maven-jaxb2-plugin.dev.java.net/docs/guide.html">Projektseite</a> des Plugins inzwischen nicht mehr stimmen. Stattdessen mussten die Pfade aus der <a href="https://maven2-repository.dev.java.net/">Repositoryseite</a> von java.net verwendet werden.</p>
<p>Die Dependency-Versionen sind jetzt im Parent-POM definiert, entsprechen aber den Versionen aus dem gestrigen Beitrag.</p>
<p>Das Mapping mappt jetzt das Attribut HITCOUNT des Elements NAVIGATIONENTRY auf den Java-Typ int (genauer gesagt den Wrapper Integer um auch null-Werte darstellen zu k&#246;nnen) und sieht jetzt folgenderma&#223;en aus:</p>
<pre>&lt;?xml version="1.0" ?&gt;
&lt;!--
	The syntax of the binding file for DTD is defined in the JAXB EA.
	See vendorSchemaLangs.html for details.
--&gt;
&lt;xml-java-binding-schema xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:ci="http://jaxb.dev.java.net/plugin/listener-injector"&gt;

  &lt;!-- specify the package name for the generated code --&gt;
  &lt;options package="de.mms_dresden.mip.hsp.base.services.search" /&gt;
  &lt;xjc:serializable/&gt;

  &lt;element name="NAVIGATIONENTRY" type="class"&gt;
    &lt;attribute name="HITCOUNT" convert="int" /&gt;
  &lt;/element&gt;
&lt;/xml-java-binding-schema&gt;</pre>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2007/08/24/jaxb2-bindings-aus-einer-dtd-mit-typmapping-mit-maven2-generieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
