WSDL2Swift
WSDL2ObjC 的 Swift 代替品,用于制作 SOAP 请求并解析 WSDL 中定义的响应。无 Objective-C。
可以使用 Toki 实现用于单元测试的存根。
输入 & 输出
输入
- WSDL 1.1 xmls
- XSD xmls
输出
- 一个作为 SOAP 客户端的 Swift 文件
- Swift 4 (Xcode 9)
- 使用 URLSession 进行连接
- 使用 BrightFutures 返回异步请求
- 使用 Fuzi 快速解析 xmls
- 使用 AEXML 生成 xmls
使用方法
构建
bundle install
bundle exec fastlane archive
您可以使用WSDL2Swift方案对xcodeproj进行构建和调试。目前还不支持归档构建。
产品可执行文件是可移植的,前提是与./Frameworks和./Stencils一起发送。
生成
从WSDL和XSD xml生成WSDL.swift
./build/Build/Products/Release/WSDL2Swift --out path/to/WSDL.swift path/to/service.wsdl.xml path/to/service.xsd.xml
输入文件的顺序很重要。引用的XSD应置于引用WSDL之后。
在应用中使用
将WSDL.swift添加到您的项目中并使用:请注意,服务类型名称和请求类型名称可能会根据源WSDL而有所不同。
使用W3Schools温度转换器示例生成的代码
public struct TempConvert: WSDLService {
:
public func request(_ parameters: TempConvert_CelsiusToFahrenheit) -> Future<TempConvert_CelsiusToFahrenheitResponse, WSDLOperationError> {
return requestGeneric(parameters)
}
:
}
:
public struct TempConvert_CelsiusToFahrenheit {
public var Celsius: String?
}
public struct TempConvert_CelsiusToFahrenheitResponse {
public var CelsiusToFahrenheitResult: String?
}
:
(continued...)
使用生成的客户端代码
let service = TempConvert(endpoint: "https://w3schools.org.cn")
service.request(TempConvert_CelsiusToFahrenheit(Celsius: "23.4")).onComplete { r in
NSLog("%@", "TempConvert_CelsiusToFahrenheit(Celsius: \"23.4\") = \(r)")
}
带有依赖项
pod 'WSDL2Swift'
请注意,pod WSDL2Swift仅引入了运行时依赖。它不提供WSDL2Swift可执行二进制文件或生成的WSDL客户端Swift文件。
有时,在依赖链的某个地方(传递性框架依赖项或测试包)需要libxml2的头文件搜索路径。请参阅podspec以手动添加。
自定义
您可以通过编辑生成的代码来指定SOAP请求的字符集。
以下代码是您想指定字符编码为utf-8时的示例。
public var characterSetInContentType: CharacterSetInContentType {
return .utf8
}
默认情况下,设置为未指定
。
示例
在xcodeproj中,iOSWSDL2Swift目标是一个使用WSDL2Swift的示例。它在构建的第一步生成WSDL+(ServiceName).swift
并根据ViewController.swift使用它。
您需要将您的WSDL和XSD xml文件放置于exampleWSDLS文件夹中。
架构
使用视角...
- 使用端点URL初始化Service (在生成
WSDL+(ServiceName).swift
之后可以更改端点URL) - 使用
ServiceName_OperationName(...)
初始化请求参数 - 使用
Service.request(param)
获取由NSURLSession
完成的Future
- 参数和模型根据xsd定义进行类型化(包括可为空的情况)