2013-05-11 8 views
9

Mam konfigurację Spring w moim projekcie. W tym context.xml jest dynamicznie przepisywany przeze mnie w Javie. Moje pytanie brzmi, dlaczego adres URL obszaru nazw fasoli nie nadchodzi po przepisaniu pliku?Opcje przepisywania w pliku Context.xml przy użyciu Spring

Moja context.xml plik przed przepisaniem:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    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-2.0.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2..xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> 
<!-- <context:annotation-config /> --> 

<bean class="org.springframework.ws.client.core.WebServiceTemplate" id="webServiceTemplate"> 
    <constructor-arg ref="messageFactory"/> 
    <property name="marshaller" ref="xmlbeansMarshaller"/> 
    <property name="unmarshaller" ref="xmlbeansMarshaller"/> 
    <property name="defaultUri"> 
    <value>https://google.com</value></property> 
</bean></beans> 


kod Mój Java przepisać context.xml:

DocumentBuilderFactory docFactory1 = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder1 = docFactory1.newDocumentBuilder(); 
Document doc1 = docBuilder1.parse(afilePath); 

Node incIncident1 = doc1.getElementsByTagName("beans").item(0); 

NodeList beanList = incIncident1.getChildNodes(); 

NodeList beanlist1 = beanList.item(25).getChildNodes(); 
List <Map<String, String>> aunitDetails = be.extendedData.get("uicdsDetails"); 
if (aunitDetails != null) { 
    for (int i = 0; i < aunitDetails.size(); i++) { 
     Map<String, String> unitLogDetails = aunitDetails.get(i); 
     NodeList beanList2= beanlist1.item(7).getChildNodes(); 
     if (unitLogDetails.get("uURL") != null) { 
      beanList2.item(0).setTextContent(unitLogDetails.get("uicdsURL")); 
     } else { 
      beanList2.item(0).setTextContent("https://google.com"); 
     } 
     TransformerFactory transformerFactory1 = TransformerFactory.newInstance(); 
     Transformer transformer1 = transformerFactory1.newTransformer(); 
     System.out.println(doc); 
     DOMSource source1 = new DOMSource(doc1); 
     StreamResult result1 = new StreamResult(new File(afilePath)); 
     transformer1.transform(source1, result1); 
    } 
} 


Po kontekście. xml jest przepisany:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:util="http://www.springframework.org/schema/util" 
     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-2.0.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2..xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> 
    <!-- <context:annotation-config /> --> 

    <bean class="org.springframework.ws.client.core.WebServiceTemplate" id="webServiceTemplate"> 

     <constructor-arg ref="messageFactory"/> 
     <property name="marshaller" ref="xmlbeansMarshaller"/> 
     <property name="unmarshaller" ref="xmlbeansMarshaller"/> 
     <property name="defaultUri"> 
     <value>https://google.com</value></property> 
    </bean> 

</beans> 


Tutaj przepisany context.xml plik brakuje nazw XML

xmlns="http://www.springframework.org/schema/beans" 

Dlaczego xmlns brakuje podczas przepisywania?

Odpowiedz

3

Dawno temu grałem z DOM, ale spróbuj docFactory1.setNamespaceAware(true) (domyślnie jest to false) lub setAttributeNS("http://www.springframework.org/schema/beans", "xmlns").

Btw, aby uzyskać pomoc, spróbuj zredukować swój problem do niezbędnego minimum. Twój problem polega na używaniu struktury Java DOM, nie ma to nic wspólnego z wiosną. Mogłeś zadać pytanie w 3 liniach bez całego hałasu.

+0

Dziękuję za pomoc. Następnym razem na oddziałach będę śledził twoje komentarze. – MadTech

+0

Nie osądzaj mnie, kolego, bez urazy :-) Po prostu łatwiej jest nam zrozumieć problem z 3 liniami kodu niż to samo z 100 liniami;] I witamy w SO - Przy okazji, czy te rozwiązania pomogły? – rlegendi

+0

@MadTech: Plus jedna osoba, która ci pomogła, proszę. – ron

1

Po prostu głośno myślę, jaki może być wymóg, aby przepisać plik xml powyższym kodem.

Wygląda na to, że chcesz zaktualizować właściwość komponentu bean. Po prostu możesz pobrać komponent z kontekstu, zaktualizować jego właściwość w oparciu o logikę biznesową i odświeżyć kontekst! Powinno to być proste i uratować cię przed skomplikowanymi rzeczami, które robisz.

Powiązane problemy