eBay引入RestfulAPI和传统API

RestfulAPI

基于 OpenApi协议生成自定义SDK

以下接口举例

页面下方可下载OpenAPI3 Json 规范Account API
image-20240422153409979

打开 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>

此时目录结构为
image-20240422154310042

将基础包名更改为 com.ebay.crazysale.sell ,并在此目录下新建文件夹 account 。(此时生成的为Account API下的东西)

并将 api, model 移动到刚才生成的 account 包内。其余文件作为之后的公用类。

其余接口也为相同操作方法,最后结构如下:
image-20241104152521068

将此项目打包成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;

/**
* @Author: Cisco
* @Date: 2024/4/19 14:41
*/
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;

/**
* @Author: Cisco
* @Date: 2024/4/19 14:39
*/
public class CustomNameConverter implements NameConverter {

@Override
public String toClassName(String s) {
// 首字母改成大写
StringBuilder sb = new StringBuilder(s);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));

// 去掉末尾的 "Type"
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对象
SchemaCompiler sc = XJC.createSchemaCompiler();
// 设置错误监听器, 当有错误发生时, 可以定制处理逻辑
sc.setErrorListener(new CustomErrorListener());

// 获取Options对象, 用于设置参数
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);

// 设置生成的Java Bean的输出目录(注意: 这个目录必须存在)
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()));

// 设置生成的Java Bean的包
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文件
image-20241104154137024

评论加载中...