2

I'm working on a spike to try to exercise a number of technologies with spring boot (1.1.6.RELEASE), gradle (2.1) and Java 1.8. So we are looking at supporting some old style SOAP Web Service calls as well as Spring Integration. So to get off the ground I was looking at working with the example for producing a web service (http://spring.io/guides/gs/producing-web-service/) and adding spring integration into the mix.

When I did this though and try to hit the WSDL location I am now seeing this stack trace :

2014-09-22 09:53:17.823 ERROR 15188 --- [nio-8080-exec-1] a.c.c.C.[.[.[.[messageDispatcherServlet] : Servlet.service() for servlet[messageDispatcherServlet] in
 context with path [] threw exception [Request processing failed; nested exception is java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.getXmlStandalone()Z] with root cause

java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.getXmlStandalone()Z
        at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:377)
        at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:131)
        at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:98)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:699)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:743)
        at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:357)
        at org.springframework.ws.transport.http.WsdlDefinitionHandlerAdapter.handle(WsdlDefinitionHandlerAdapter.java:144)...

Looking around this looks to be related to the Xerces implementation that is pulled in for Integration. You can reproduce this by taking the example Producing a SOAP web service and changing the dependency section to look like this :

dependencies {
    compile("org.springframework.boot:spring-boot-starter-ws")
    compile("wsdl4j:wsdl4j:1.6.1")
    jaxb("com.sun.xml.bind:jaxb-xjc:2.2.4-1")
    compile(files(genJaxb.classesDir).builtBy(genJaxb))
    compile("org.springframework.boot:spring-boot-starter-integration")
}

Basically adding compile("org.springframework.boot:spring-boot-starter-integration") and then try hitting the WSDL at http://:/ws/countries.wsdl. (running gradle bootRun)

Now arguably this may not be the best way to do this and maybe I should just look to spring integration to expose the endpoint, but has anyone else seen and dealt with this?

Thanks in advance

Tristan

Note I did add the compile "org.apache.ws.xmlschema:xmlschema-core:2.1.0" dep Here is my jar list from the lib directory

aopalliance-1.0.jar
aspectjrt-1.8.2.jar
aspectjweaver-1.8.2.jar
classmate-1.0.0.jar
commons-codec-1.2.jar
commons-httpclient-3.0.1.jar
commons-io-2.4.jar
hibernate-validator-5.0.3.Final.jar
jackson-annotations-2.3.0.jar
jackson-core-2.3.4.jar
jackson-databind-2.3.4.jar
jboss-logging-3.1.1.GA.jar
jcl-over-slf4j-1.7.7.jar
jdom-1.0.jar
jul-to-slf4j-1.7.7.jar
log4j-over-slf4j-1.7.7.jar
logback-classic-1.1.2.jar
logback-core-1.1.2.jar
rome-1.0.0.jar
rome-fetcher-1.0.0.jar
slf4j-api-1.7.7.jar
snakeyaml-1.13.jar
spring-aop-4.0.7.RELEASE.jar
spring-beans-4.0.7.RELEASE.jar
spring-boot-1.1.6.RELEASE.jar
spring-boot-autoconfigure-1.1.6.RELEASE.jar
spring-boot-starter-1.1.6.RELEASE.jar
spring-boot-starter-aop-1.1.6.RELEASE.jar
spring-boot-starter-integration-1.1.6.RELEASE.jar
spring-boot-starter-logging-1.1.6.RELEASE.jar
spring-boot-starter-tomcat-1.1.6.RELEASE.jar
spring-boot-starter-web-1.1.6.RELEASE.jar
spring-boot-starter-ws-1.1.6.RELEASE.jar
spring-context-4.0.7.RELEASE.jar
spring-core-4.0.7.RELEASE.jar
spring-expression-4.0.7.RELEASE.jar
spring-integration-core-4.0.3.RELEASE.jar
spring-integration-file-4.0.3.RELEASE.jar
spring-integration-http-4.0.3.RELEASE.jar
spring-integration-ip-4.0.3.RELEASE.jar
spring-integration-stream-4.0.3.RELEASE.jar
spring-jms-4.0.7.RELEASE.jar
spring-messaging-4.0.7.RELEASE.jar
spring-oxm-4.0.7.RELEASE.jar
spring-retry-1.1.0.RELEASE.jar
spring-tx-4.0.7.RELEASE.jar
spring-web-4.0.7.RELEASE.jar
spring-webmvc-4.0.7.RELEASE.jar
spring-ws-core-2.2.0.RELEASE.jar
spring-ws-support-2.2.0.RELEASE.jar
spring-xml-2.2.0.RELEASE.jar
tomcat-embed-core-7.0.55.jar
tomcat-embed-el-7.0.55.jar
tomcat-embed-logging-juli-7.0.55.jar
validation-api-1.1.0.Final.jar
wsdl4j-1.6.1.jar
xercesImpl-2.4.0.jar
xmlschema-core-2.1.0.jar
Tristan
  • 279
  • 5
  • 21

1 Answers1

2

Looks like for the WSDL generation you should provide this dependency:

compile "org.apache.ws.xmlschema:xmlschema-core:2.1.0"

Which is optional from the Spring WS and looks like there is no appropriate implementation in your environment.

UPDATE

Try to add xalan too:

compile "xalan:xalan:2.7.1"

https://groups.google.com/forum/#!topic/google-web-toolkit/07rVeEkCtyU

Or do some tricks with Xerses: java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String

Community
  • 1
  • 1
Artem Bilan
  • 113,505
  • 11
  • 91
  • 118
  • Thanks for the response (and the edit)! I tried that out, but it landed me in the same boat. For the sake of argument I've added the jar list from my lib directory with that dependency added. – Tristan Sep 22 '14 at 16:06
  • Well... that got it. Thanks again! – Tristan Sep 22 '14 at 17:14
  • I'm in a Maven project and so I needed to add the latest xercesImpl and latest xalan to my pom to fix my exception. – Boo Nov 06 '18 at 04:06
  • Your comment somehow is out-dated. Please, start a new question if you have problems. The issue with versions that they move all the time, so even these old answers might be out-dated – Artem Bilan Nov 06 '18 at 04:41