Элемент 'value' не может содержать дочерний элемент 'object', поскольку модель содержимого родительского элемента является только текстовой - PullRequest
0 голосов
/ 23 мая 2011

У меня есть свойство типа IDictionary с типом ключа и типом значения, отличным от строки.В большинстве примеров, приведенных в Интернете и в Spring.Net, в качестве одного из типов используется строка.

Вот параметры конфигурации:

<property name="DirectoryServiceAgents">
  <dictionary key-type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier" value-type="OM.ServiceTier.Services.User.Internal.IDirectoryServiceAgent, OM.ServiceTier">        
    <entry>
      <key>
        <object type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier">
          <constructor-arg type="string" value="${activeDirectory.Domain}"/>
        </object>
      </key>
      <value>
        <object type="OM.ServiceTier.Services.User.Internal.DirectoryServiceAgent, OM.ServiceTier">
          <property name="LDAPPath" value="${activeDirectory.LDAPPath}"/>
          <property name="LDAPContainer" value="${activeDirectory.LDAPContainer}"/>
          <property name="UserName" value="${activeDirectory.UserName}"/>
          <property name="Password" value="${activeDirectory.Password}"/>
        </object>
      </value>
    </entry>
  </dictionary>
</property>

Я получаю следующее ConfigurationErrorException:

Ошибка создания контекста 'spring.root': элемент 'http://www.springframework.net:value' не может содержать дочерний элемент' http://www.springframework.net:object', поскольку модель содержимого родительского элемента является только текстовой.

Что-то не так в моей конфигурации?

1 Ответ

1 голос
/ 23 мая 2011

Я не уверен, что конфигурация словаря поддерживает определения встроенных объектов для ключей и / или значений. Это не упоминается в документации о настройке значений коллекции .

Не могли бы вы попробовать эту конфигурацию:

<object>
  <!-- snip -->
  <property name="DirectoryServiceAgents">
    <dictionary 
       key-type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier" 
       value-type="OM.ServiceTier.Services.User.Internal.IDirectoryServiceAgent, OM.ServiceTier">        
      <entry key-ref="authDomainId" value-ref="serviceAgent"/>
    </dictionary>
  </property>
  <!-- snip -->
</object>    

<object id="authDomainId" 
        type="OM.ServiceTier.DTO.Transients.AuthenticationDomainIdentifier, OM.ServiceTier">
  <constructor-arg type="string" value="${activeDirectory.Domain}"/>
</object>

<object id="serviceAgent"
        type="OM.ServiceTier.Services.User.Internal.DirectoryServiceAgent, OM.ServiceTier">
  <property name="LDAPPath" value="${activeDirectory.LDAPPath}"/>
  <property name="LDAPContainer" value="${activeDirectory.LDAPContainer}"/>
  <property name="UserName" value="${activeDirectory.UserName}"/>
  <property name="Password" value="${activeDirectory.Password}"/>
</object>
...