如何使用 Axis2c 从 WSDL 文件生成 C 文件

How to use Axis2c to generate C files from WSDL file

我想在 C 代码中使用网络服务。我正在努力成为一个客户。我需要一些东西来完成 Axis2java 所做的事情并从 wsdl 文件生成 classes。 我发现 Axis2c 从 wsdl 文件生成 (.c) 文件。 我是从 here 下载的。解压缩它。我为 AXIS2C_HOME 创建了环境变量,并创建了 AXIS2C_CLASSPATH。 但我做不到。

当我键入此命令时:

WSDL2C -uri -ss -sd -d none -u -f -o

我收到此错误:

回声
错误:无法找到或加载 main class org.apache.axis2.wsdl.WSDL2C

我该如何解决这个问题。请告诉我如何正确使用此 Axis2c 工具。

提前致谢。

@loentar:我安装了 Axis2/Java 并为其设置了环境变量。现在我 运行 wsdl2c.bat 我明白了 :

E:\dev\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c>WSDL2C.bat

E:\dev\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c>回显关闭
用法:java [-options] class [args...]
           (执行 class)
   或 java [-options] -jar jarfile [args...]
           (执行一个jar文件)
其中选项包括:
    -d32 使用 32 位数据模型(如果可用)
    -d64 使用 64 位数据模型(如果可用)
    -服务器到 select "server" 虚拟机
                  默认 VM 是服务器。

    -cp
    -class路径
                  一个 ;分离的目录列表,JAR 档案,
                  和 ZIP 档案以搜索 class 文件。
    -D=
                  设置系统 属性
    -详细:[class|gc|jni]
                  启用详细输出
    -version 打印产品版本并退出
    -版本:
                  要求指定版本为 运行
    -showversion 打印产品版本并继续
    -jre-限制搜索 | -no-jre-限制搜索
                  include/exclude 版本搜索中的用户私有 JRE
    -? -help 打印此帮助信息
    -X 打印非标准选项的帮助
    -ea[:...|:]
    -启用断言[:...|:]
                  启用具有指定粒度的断言
    -da[:...|:]
    -disableassertions[:...|:]
                  禁用具有指定粒度的断言
    -esa | -启用系统断言
                  启用系统断言
    -dsa | -禁用系统断言
                  禁用系统断言
    -代理库:[=]
                  加载本机代理库,例如-agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -代理路径:[=]
                  通过完整路径名加载本机代理库
    -java代理人:[=]
                  加载 Java 编程语言代理,参见 java.lang.instrument

    -溅:
                  显示带有指定图像的启动画面
见 http://www.oracle.com/technetwork/java/javase/documentation/index.html
矿石详情。

之后我 运行 这个命令:

E:\dev\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c>WSDL2C.bat -uri hello.wsdl
-u -uw

E:\dev\Tools\axis2c-bin-1.6.0-win32\bin\tools\wsdl2c>回显关闭
无法识别的选项:-uri
错误:无法创建 Java 虚拟机。
错误:发生致命异常。程序将会退出。

我能做什么? 顺便说一句,我正在使用 windows 8。

除了 Axis2/C,您还必须安装 Axis2/Java。

AXIS2_HOME 必须指向 Axis2/Java 安装。

详情请见codegen的README

创建和编译客户端的完整命令列表是:

# create stubs
sh $AXIS2C_HOME/bin/tools/wsdl2c/WSDL2C.sh -uri Calculator.wsdl -u -uw

# implement main() in src/your_client.c
# see samples/codegen/client/calculator for example

# compile and link client
gcc -o calculator_client src/*.c -I$AXIS2C_HOME/include/axis2-1.6.0 -L$AXIS2C_HOME/lib -laxutil -laxis2_axiom -laxis2_parser -laxis2_engine -lpthread -laxis2_http_sender -laxis2_http_receiver -ldl -Wl,--rpath -Wl,$AXIS2C_HOME/lib

我为 JAVA_HOME、AXIS2_HOME、AXIS2C_HOME 设置了环境变量,并将它们的 lib 文件夹添加到 CLASSPATH。在 运行 这个命令之后: WSDL2C.bat -uri hello.wsdl -u -uw 我收到这条消息:

echo off 
Error: Could not find or load main class org.apache.axis2.wsdl.WSDL2C

我自己找到了解决方案。 :) 我仔细检查了我是否为 AXIS2_HOME 创建了环境变量,我看到它在那里,正确。 尽管它存在,但我还是尝试在命令提示符下再次设置它。所以我输入:

SET AXIS2_HOME=E:\dev\Tools\axis2-1.6.2

然后我输入了 WSDL2C 代码生成器的命令:

WSDL2C.bat -uri hello.wsdl -u -uw

砰!它工作正常。 现在我可以从 WSDL 文件生成 C 文件了。