无法使用带WSSE的WSDL2Java生成Web服务客户端

时间:2012-05-09 19:24:11

标签: java wsdl wss wsdl2java

我在使用Axis1.4中的WSDL2Java生成客户端类时遇到问题。 WSDL包含标题

xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"

显示的错误是

java.io.IOException: Element {http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security is referenced but not defined.
    at org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(SymbolTable.java:670)
    at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:545)
    at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:518)
    at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495)
    at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
    at java.lang.Thread.run(Thread.java:680)

WSDL2Java的参数是:-o ./src --package ws.generated -v https://myurl/?WSDL

我是否缺少参数或某些特殊配置?

1 个答案:

答案 0 :(得分:0)

我必须看到整个WSDL是确定的,但看起来在定义wsse前缀时引用了命名空间时,没有迹象表明(wsdl2java)引擎在哪里可以找到元素/类型定义命名空间。尝试将以下内容添加到WSDL中并再次执行:

       <wsdl:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
       location="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" />

此元素应该是<wsdl:types><wsdl:message>元素的对等元素。

这假设wsdl前缀用wsdl定义的名称空间标识,这是一种常见的约定。