카테고리 없음

[E] org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.

mxnxeonx 2023. 3. 23. 10:28
728x90
728x90

Linux Ubuntu 18.04, Jeus8, ProObject7 환경에서 후행 서비스 구현 중 다음과 같은 에러가 발생하였다.

[2023.03.23 10:15:52.722] [Thread : threadpool.System-1 [POSERVER-45]] [SEVERE] [ProObject7] Failed to parse system application information, setting default values...
<<__Exception__>>
javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.]
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:335)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:578)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:264)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
	at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204)
	at com.tmax.proobject.engine.ProObjectBootLoader.loadConfiguration(ProObjectBootLoader.java:548)
	at com.tmax.proobject.engine.system.application.SystemApplicationManager.loadSystemMeta(SystemApplicationManager.java:32)
	at com.tmax.proobject.engine.system.BuiltinApplicationManager.getProObjectApplicationMeta(BuiltinApplicationManager.java:194)
	at com.tmax.proobject.engine.system.BuiltinApplicationManager.create(BuiltinApplicationManager.java:185)
	at com.tmax.proobject.engine.application.ApplicationManager.boot(ApplicationManager.java:175)
	at com.tmax.proobject.engine.ProObjectBootLoader.initializeApplication(ProObjectBootLoader.java:657)
	at com.tmax.proobject.engine.ProObjectBootLoader.bootProObject(ProObjectBootLoader.java:376)
	at com.tmax.proobject.engine.ProObjectBootLoader.boot(ProObjectBootLoader.java:177)
	at com.tmax.proobject.engine.event.channel.eventhandler.httpservlet.ProObjectHttpServlet.init(ProObjectHttpServlet.java:72)
	at com.tmax.proobject.endpoint.ProObjectHttpEndpointServlet.init(ProObjectHttpEndpointServlet.java:52)
	at javax.servlet.GenericServlet.init(GenericServlet.java:244)
	at jeus.servlet.loader.ServletReloader.doInitInstance(ServletReloader.java:63)
	at jeus.servlet.loader.ContainerManagedInstanceReloader.checkAndInitInstance(ContainerManagedInstanceReloader.java:79)
	at jeus.servlet.loader.ContainerManagedInstanceReloader.getInstance(ContainerManagedInstanceReloader.java:60)
	at jeus.servlet.loader.ServletReloader.getServlet(ServletReloader.java:44)
	at jeus.servlet.engine.ServletWrapper.preload(ServletWrapper.java:90)
	at jeus.servlet.engine.ServletManager.preloadServletWrapper(ServletManager.java:454)
	at jeus.servlet.engine.ServletManager.preloadServlets(ServletManager.java:447)
	at jeus.servlet.engine.Context.distributeInternal(Context.java:1498)
	at jeus.servlet.engine.Context.postDistribute2(Context.java:1304)
	at jeus.servlet.deployment.WebModuleDeployer.postDistribute2(WebModuleDeployer.java:238)
	at jeus.deploy.deployer.AbstractDeployer.distribute2(AbstractDeployer.java:296)
	at jeus.deploy.deployer.AbstractDeployer.distribute(AbstractDeployer.java:240)
	at jeus.deploy.deployer.DeploymentAdministrator.distribute(DeploymentAdministrator.java:245)
	at jeus.server.Server.innerSingleDistribute(Server.java:2756)
	at jeus.server.Server.access$1700(Server.java:219)
	at jeus.server.Server$InnerDistributeAppTask.run(Server.java:2616)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at jeus.util.pool.ManagedThreadPoolImpl$1.run(ManagedThreadPoolImpl.java:81)
	at jeus.util.pool.ManagedThreadPoolImpl$WorkWrapper.run(ManagedThreadPoolImpl.java:279)
	at jeus.util.pool.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:1299)
	at jeus.util.pool.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1343)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
	at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258)
	... 37 more
<<__!Exception__>>

 

주요 문장만 고르면, 'XML 문서에서 element에 문제가 발생했다' 정도로 해석이 가능하다.

javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.]
Caused by: org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.

 

 

해결 방법

연관된(해당 에러가 발생하는 컴파일 지점) XML 문서를 찾아보니 이렇게 되어 있었는데,

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns13:application xmlns:ns16="http://www.tmax.co.kr/proobject/taskobject" xmlns:ns17="http://www.tmax.co.kr/proobject/jobobject" xmlns:ns14="http://www.tmax.co.kr/proobject/serviceobject-automatic" xmlns:ns15="http://www.tmax.co.kr/proobject/sourcecode" xmlns:ns18="http://www.example.org/externalObjectConfig" xmlns:ns19="http://www.tmax.co.kr/proobject/contents" xmlns:ns21="http://www.tmax.co.kr/proobject/siteConfig" xmlns:ns9="http://www.tmax.co.kr/proobject/message" xmlns:ns22="http://www.tmax.co.kr/proobject/property" xmlns:ns23="http://www.tmax.co.kr/proobject/serverConfig" xmlns:ns5="http://www.tmax.co.kr/proobject/serviceobject" xmlns:ns12="http://www.tmax.co.kr/proobject/messagebundle" xmlns:ns6="http://www.tmax.co.kr/proobject/bizobject" xmlns:ns13="http://www.tmax.co.kr/proobject/application/runtime" xmlns:ns7="http://www.tmax.co.kr/proobject/dataobjectfactory" xmlns:ns10="http://www.tmax.co.kr/proobject/dto" xmlns:ns20="http://www.tmax.co.kr/proobject/probuilder_config" xmlns:ns8="http://www.tmax.co.kr/proobject/dataobject" xmlns:ns11="http://www.tmax.co.kr/proobject/servicegroup" xmlns:ns2="http://www.tmax.co.kr/proobject/resource" xmlns:ns4="http://www.tmax.co.kr/proobject/flow" xmlns:ns3="http://www.tmax.co.kr/proobject/mapping">
    <ns13:name>proobject</ns13:name>
</ns13:application>

<!-- 후행 서비스 -->
<ns13:deferred-service>
    <ns13:enable>true</ns13:enable>
    <ns13:deferred-queue-name>deferredQueue</ns13:deferred-queue-name>
    <ns13:request-table>po_deferred</ns13:request-table>
    <ns13:history-table>po_deferred</ns13:history-table>
    <ns13:enable-deferredId>true</ns13:enable-deferredId>
    <ns13:deferred-date-format>yyyyMMdd</ns13:deferred-date-format>
</ns13:deferred-service>

 

후행 서비스 태그 <ns13:deferred-service>가 어플리케이션 태그 <ns13:application> 안으로 들어가야하나보다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns13:application xmlns:ns16="http://www.tmax.co.kr/proobject/taskobject" xmlns:ns17="http://www.tmax.co.kr/proobject/jobobject" xmlns:ns14="http://www.tmax.co.kr/proobject/serviceobject-automatic" xmlns:ns15="http://www.tmax.co.kr/proobject/sourcecode" xmlns:ns18="http://www.example.org/externalObjectConfig" xmlns:ns19="http://www.tmax.co.kr/proobject/contents" xmlns:ns21="http://www.tmax.co.kr/proobject/siteConfig" xmlns:ns9="http://www.tmax.co.kr/proobject/message" xmlns:ns22="http://www.tmax.co.kr/proobject/property" xmlns:ns23="http://www.tmax.co.kr/proobject/serverConfig" xmlns:ns5="http://www.tmax.co.kr/proobject/serviceobject" xmlns:ns12="http://www.tmax.co.kr/proobject/messagebundle" xmlns:ns6="http://www.tmax.co.kr/proobject/bizobject" xmlns:ns13="http://www.tmax.co.kr/proobject/application/runtime" xmlns:ns7="http://www.tmax.co.kr/proobject/dataobjectfactory" xmlns:ns10="http://www.tmax.co.kr/proobject/dto" xmlns:ns20="http://www.tmax.co.kr/proobject/probuilder_config" xmlns:ns8="http://www.tmax.co.kr/proobject/dataobject" xmlns:ns11="http://www.tmax.co.kr/proobject/servicegroup" xmlns:ns2="http://www.tmax.co.kr/proobject/resource" xmlns:ns4="http://www.tmax.co.kr/proobject/flow" xmlns:ns3="http://www.tmax.co.kr/proobject/mapping">
    <ns13:name>proobject</ns13:name>

    <!-- 후행 서비스 -->
    <ns13:deferred-service>
        <ns13:enable>true</ns13:enable>
        <ns13:deferred-queue-name>deferredQueue</ns13:deferred-queue-name>
        <ns13:request-table>po_deferred</ns13:request-table>
        <ns13:history-table>po_deferred</ns13:history-table>
        <ns13:enable-deferredId>true</ns13:enable-deferredId>
        <ns13:deferred-date-format>yyyyMMdd</ns13:deferred-date-format>
    </ns13:deferred-service>
</ns13:application>

 

위처럼 변경해주니 해결 완료. 이제 ProObject 부팅시 해당 에러는 발생하지 않는다.

728x90
320x100