RestfulAPI
基于 OpenApi协议生成自定义SDK
以下接口举例
页面下方可下载OpenAPI3 Json 规范Account API

打开 Swagger Editor Online
File > Import File 导入文件后
Generate Client > Java 生成客户端
在IDE内打开Swagger生成的包,修改Maven信息
1 2 3 4 5
| <groupId>com.ebay.crazysale</groupId> <artifactId>ebay-sell-cli</artifactId> <packaging>jar</packaging> <name>ebay-sell-cli</name> <version>1.0.0</version>
|
此时目录结构为

将基础包名更改为 com.ebay.crazysale.sell ,并在此目录下新建文件夹 account 。(此时生成的为Account API下的东西)
并将 api, model 移动到刚才生成的 account 包内。其余文件作为之后的公用类。
其余接口也为相同操作方法,最后结构如下:

将此项目打包成jar
1
| mvn install -Dmaven.test.skip=true
|
将jar包上传至 nexus, 并上传项目内的pom.xml文件。
至此即可再ebay-server内调用了
传统API
基于 XSD生成接口规范 Java Bean
在此处下载 官方提供的XSD文件 Trading Schema (XSD)
新建临时项目(Maven 项目)
导入 jaxb-xjc 依赖
1 2 3 4 5
| <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-xjc</artifactId> <version>2.3.3</version> </dependency>
|
新建类 CustomErrorListener
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package cc.obito.demo.jaxb;
import com.sun.tools.xjc.api.ErrorListener; import org.xml.sax.SAXParseException;
public class CustomErrorListener implements ErrorListener { @Override public void error(SAXParseException exception) { System.out.println("error: " + exception); }
@Override public void fatalError(SAXParseException exception) { System.out.println("fatalError: " + exception); }
@Override public void warning(SAXParseException exception) { System.out.println("warning: " + exception); }
@Override public void info(SAXParseException exception) { System.out.println("info: " + exception); } }
|
新建类 CustomNameConverter , 用于生成的Bean重写类名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| package cc.obito.demo.jaxb;
import com.sun.xml.bind.api.impl.NameConverter;
public class CustomNameConverter implements NameConverter {
@Override public String toClassName(String s) { StringBuilder sb = new StringBuilder(s); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
if (sb.toString().endsWith("Type")) { sb.delete(sb.length() - 4, sb.length()); }
String className = sb.toString(); System.out.println("类名为: " + className); return className; }
@Override public String toInterfaceName(String s) { System.out.println("InterfaceName为: " + s); return s; }
@Override public String toPropertyName(String s) { System.out.println("PropertyName为: " + s); return s; }
@Override public String toConstantName(String s) { System.out.println("ConstantName为: " + s); return s; }
@Override public String toVariableName(String s) { System.out.println("VariableName为: " + s); return s; }
@Override public String toPackageName(String s) { System.out.println("PackageName为: " + s); return s; } }
|
最后生成Bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public class XsdGeneration {
public static void main(String[] args) throws Exception { SchemaCompiler sc = XJC.createSchemaCompiler(); sc.setErrorListener(new CustomErrorListener());
Options options = ((SchemaCompilerImpl) sc).getOptions();
String globalXjbPath = "/Users/cisco/Desktop/temp/global.xjb"; URL globalXjb = new File(globalXjbPath).toURI().toURL(); Objects.requireNonNull(globalXjb); options.addBindFile(new File(globalXjb.toURI()));
options.setNameConverter(new CustomNameConverter(), null);
String outputDir = "/Users/cisco/Desktop/temp"; String[] arguments = new String[]{"-d", outputDir}; options.parseArgument(arguments, 0);
String absolutePath = "/Users/cisco/Desktop/temp/ebaysvc.xsd"; URL xsd = new File(absolutePath).toURI().toURL(); Objects.requireNonNull(xsd); sc.parseSchema(new InputSource(xsd.toExternalForm()));
sc.forcePackageName("com.cisco.ebay.service.entity.xml"); JCodeModel jCodeModel = sc.bind().generateCode(null, null); jCodeModel.build(options.targetDir); System.out.println("Generate models success."); }
}
|
执行完成后,在 outputDir 文件夹内即可查看生成的Java文件
