Spring: крайние случаи, когда файл определения XML-компонента определяет значения, содержащие специальные символы - PullRequest
0 голосов
/ 15 июня 2019

Каковы точные правила, как Spring выбирает значения из XML-файла определения компонента?

Я имею в виду возможные крайние случаи, когда значение содержит специальные символы:

'  "   \t  \n   \uXXXX (unicode escape)   \123 (octal escape) 

Может быть, что еще?

Например, это распознанные :

  • одинарные кавычки (')
  • двойные кавычки (")

, но они НЕ распознаются (хотя их наличие не является ошибкой / исключением):

  • \ t
  • \ n
  • \ uXXXX (выход в Unicode)
  • \ 123 (восьмеричное экранирование)

Мой файл определения компонента:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="student" class="com.my.pkg2.Student">
            <property name="girlFriend">
                <list>
                    <value>Mary</value>     <!-- "QUOTES NOT NEEDED !!! -->
                    <value>"Jane"</value>       <!-- BUT OK: String girlFriend[1] = "\"Jane\"" -->
                    <value>'Jessica'</value>  <!-- BUT OK: String girlFriend[2] = "'Jane'" -->
                    <value>hello\tworld</value>  <!--  \t is OK but not recognized - output: "hello\tworld"  -->
                    <value>line1\nline2</value>  <!--  \n is OK but not recognized - output: "line1\nline2"  -->
   <!-- \123 -->    <value>start\123end</value>  <!-- OK but not recognized - output: "start\123end"  -->
  <!-- \u7BCD -->   <value>start\u7BCDend</value>  <!-- OK but not recognized - output: "start\u7BCDend"  -->
                </list>
            </property>  

        </bean>    
    </beans>

Сам компонент:

package com.my.pkg2;

public class Student {

    String[] girlFriend;  // array

    // setters defined  
}

"Драйвер"класс:

@WebListener
public class MyListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {

        ApplicationContext context = new ClassPathXmlApplicationContext("myBeanDefinitions.xml");

        Student student = (Student) context.getBean("student");

        System.out.println(Arrays.toString(student.girlFriend));            
    }   

ВЫХОД:

[Мэри," Джейн "," Джессика ", привет \ tworld, line1 \ nline2, начало \123end, start \ u7BCDend]

...