Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
signal
traffic-signal-platform
Commits
e3c8255a
Commit
e3c8255a
authored
Jan 08, 2024
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 添加海信xml协议转化实体功能
parent
dbf2b89a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
282 additions
and
0 deletions
+282
-0
MessageTypeEnum.java
...t/wanji/utc/hisense/common/enums/xml/MessageTypeEnum.java
+36
-0
SystemScriptionRequest.java
...nji/utc/hisense/pojo/xml/pojo/SystemScriptionRequest.java
+50
-0
HeartBeatRequest.java
...isense/pojo/xml/pojo/messagecontent/HeartBeatRequest.java
+23
-0
LogOnRequest.java
...tc/hisense/pojo/xml/pojo/messagecontent/LogOnRequest.java
+27
-0
XMLUtils.java
...ce/src/main/java/net/wanji/utc/hisense/util/XMLUtils.java
+146
-0
No files found.
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/common/enums/xml/MessageTypeEnum.java
0 → 100644
View file @
e3c8255a
package
net
.
wanji
.
utc
.
hisense
.
common
.
enums
.
xml
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
/**
* @author duanruiming
* @date 2024/01/08 10:12
*/
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public
enum
MessageTypeEnum
{
HEARTBEAT_STATUS
(
0
,
"心跳状态"
),
LOGON_STATUS
(
1
,
"登录状态"
),
SUBSCRIBE_STATUS
(
2
,
"订阅状态"
),
ONLINE_STATUS
(
3
,
"联机状态"
),
PAHSE_STATUS
(
10
,
"相位状态"
),
UNIT_STATUS
(
11
,
"单元状态"
),
COORDINATE_STATUS
(
12
,
"协调状态"
),
MANUAL_CONTROL
(
16
,
"手动放案控制"
),
PHASE_LOCK
(
18
,
"相位驻留控制"
),
SIGNAL_TIMING
(
21
,
"信号机校时请求"
),
STEP_CANCEL_CONTROL
(
22
,
"步进及取消控制"
),
FOLLOW_PHASE
(
23
,
"跟随相位状态"
),
FAULT_STATUS
(
26
,
"故障状态"
),
CHANNEL_CONTROL
(
27
,
"通道勤务控制"
),
SCHEME_RING_REQUEST
(
30
,
"方案环图请求"
),
SCHEME_OPTIMIZE_CONTROL
(
39
,
"方案优化控制"
),
CHANNEL_STATUS
(
40
,
"通道状态"
);
private
int
type
;
private
String
message
;
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/pojo/xml/pojo/SystemScriptionRequest.java
0 → 100644
View file @
e3c8255a
package
net
.
wanji
.
utc
.
hisense
.
pojo
.
xml
.
pojo
;
import
lombok.Data
;
import
net.wanji.utc.hisense.common.enums.xml.MessageTypeEnum
;
import
javax.xml.bind.annotation.*
;
import
java.io.Serializable
;
/**
* 海信xml消息格式体
*
* @author duanruiming
* @date 2024/01/08 10:03
*/
@Data
@XmlAccessorType
(
XmlAccessType
.
FIELD
)
@XmlRootElement
(
name
=
"systemScription"
)
public
class
SystemScriptionRequest
implements
Serializable
{
// 标签属性
@XmlAttribute
(
name
=
"System"
)
private
String
system
=
"TCIP"
;
@XmlAttribute
(
name
=
"Version"
)
private
String
version
=
"1.0"
;
// 实体类属性
// 子系统,海信接口服务器向外部系统发送时为Hisense
@XmlElement
(
name
=
"subSystem"
,
defaultValue
=
""
)
private
String
subSystem
;
/**
* {@link MessageTypeEnum}
*/
@XmlElement
(
name
=
"messageType"
,
defaultValue
=
""
)
private
int
messageType
;
// 1-请求 0-应答
@XmlElement
(
name
=
"isRequest"
,
defaultValue
=
""
)
private
String
isRequest
;
// seq唯一,长度固定20, 采用YYYYMMDDHHMMSS + 6位顺序号,不足前补0
@XmlElement
(
name
=
"seq"
,
defaultValue
=
""
)
private
String
seq
;
// 是否需要应答,1-需要 0-不需要
@XmlElement
(
name
=
"needResponse"
,
defaultValue
=
""
)
private
int
needResponse
;
// 针对所有消息, 1-成功 0-失败
@XmlElement
(
name
=
"result"
,
defaultValue
=
""
)
private
String
result
;
// 保留
@XmlElement
(
name
=
"flag"
,
defaultValue
=
""
)
private
boolean
flag
;
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/pojo/xml/pojo/messagecontent/HeartBeatRequest.java
0 → 100644
View file @
e3c8255a
package
net
.
wanji
.
utc
.
hisense
.
pojo
.
xml
.
pojo
.
messagecontent
;
import
lombok.Data
;
import
net.wanji.utc.hisense.pojo.xml.pojo.SystemScriptionRequest
;
import
javax.xml.bind.annotation.XmlAccessType
;
import
javax.xml.bind.annotation.XmlAccessorType
;
import
javax.xml.bind.annotation.XmlRootElement
;
/**
* @author duanruiming
* @date 2024/01/08 16:24
*/
@Data
@XmlAccessorType
(
XmlAccessType
.
FIELD
)
@XmlRootElement
(
name
=
"systemScription"
)
public
class
HeartBeatRequest
extends
SystemScriptionRequest
{
private
HeartBeatContent
messageContent
;
@Data
public
static
class
HeartBeatContent
{
}
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/pojo/xml/pojo/messagecontent/LogOnRequest.java
0 → 100644
View file @
e3c8255a
package
net
.
wanji
.
utc
.
hisense
.
pojo
.
xml
.
pojo
.
messagecontent
;
import
lombok.Data
;
import
net.wanji.utc.hisense.pojo.xml.pojo.SystemScriptionRequest
;
import
javax.xml.bind.annotation.XmlAccessType
;
import
javax.xml.bind.annotation.XmlAccessorType
;
import
javax.xml.bind.annotation.XmlRootElement
;
/**
* @author duanruiming
* @date 2024/01/08 13:24
*/
@Data
@XmlAccessorType
(
XmlAccessType
.
FIELD
)
@XmlRootElement
(
name
=
"systemScription"
)
public
class
LogOnRequest
extends
SystemScriptionRequest
{
private
LogOnContent
messageContent
;
@Data
@XmlAccessorType
(
XmlAccessType
.
FIELD
)
public
static
class
LogOnContent
{
private
String
user
;
private
String
password
;
}
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/util/XMLUtils.java
0 → 100644
View file @
e3c8255a
package
net
.
wanji
.
utc
.
hisense
.
util
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.utc.hisense.pojo.xml.pojo.messagecontent.HeartBeatRequest
;
import
net.wanji.utc.hisense.pojo.xml.pojo.messagecontent.LogOnRequest
;
import
javax.xml.bind.JAXBContext
;
import
javax.xml.bind.JAXBException
;
import
javax.xml.bind.Marshaller
;
import
javax.xml.bind.Unmarshaller
;
import
java.io.*
;
/**
* 封装了XML转换成object,object转换成XML的代码
*
* @author duanruiming
* @date 2024/01/08 10:45
*/
@Slf4j
public
class
XMLUtils
{
/**
* 将对象直接转换成String类型的 XML输出
*
* @param obj
* @return
*/
public
static
String
convertToXml
(
Object
obj
)
throws
Exception
{
// 创建输出流
StringWriter
sw
=
new
StringWriter
();
try
{
sw
.
write
(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\r"
);
// 利用jdk中自带的转换类实现
JAXBContext
context
=
JAXBContext
.
newInstance
(
obj
.
getClass
());
Marshaller
marshaller
=
context
.
createMarshaller
();
// 格式化xml输出的格式
marshaller
.
setProperty
(
Marshaller
.
JAXB_FORMATTED_OUTPUT
,
Boolean
.
TRUE
);
// 去掉默认格式报文头
marshaller
.
setProperty
(
Marshaller
.
JAXB_FRAGMENT
,
Boolean
.
TRUE
);
// 将对象转换成输出流形式的xml
marshaller
.
marshal
(
obj
,
sw
);
}
catch
(
JAXBException
e
)
{
log
.
error
(
"实体类对象转换xml失败:"
,
e
);
throw
new
Exception
(
"实体类对象转换xml失败:"
,
e
);
}
return
sw
.
toString
();
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
HeartBeatRequest
heartBeatRequest
=
new
HeartBeatRequest
();
HeartBeatRequest
.
HeartBeatContent
heartBeatContent
=
new
HeartBeatRequest
.
HeartBeatContent
();
//heartBeatRequest.setMessageContent(body);
heartBeatRequest
.
setMessageContent
(
heartBeatContent
);
heartBeatRequest
.
setSubSystem
(
"Hisense"
);
heartBeatRequest
.
setIsRequest
(
"1"
);
System
.
err
.
println
(
convertToXml
(
heartBeatRequest
));
System
.
err
.
println
(
"================"
);
LogOnRequest
logOnMessageContent
=
new
LogOnRequest
();
LogOnRequest
.
LogOnContent
body
=
new
LogOnRequest
.
LogOnContent
();
body
.
setUser
(
"user"
);
body
.
setPassword
(
"123456"
);
logOnMessageContent
.
setMessageContent
(
body
);
logOnMessageContent
.
setSubSystem
(
"Hisense"
);
logOnMessageContent
.
setFlag
(
Boolean
.
TRUE
);
logOnMessageContent
.
setIsRequest
(
""
);
System
.
err
.
println
(
convertToXml
(
logOnMessageContent
));
}
/**
* 将对象根据路径转换成xml文件
*
* @param obj
* @param path
*/
public
static
String
convertToXml
(
Object
obj
,
String
path
)
{
FileWriter
fw
=
null
;
try
{
// 利用jdk中自带的转换类实现
JAXBContext
context
=
JAXBContext
.
newInstance
(
obj
.
getClass
());
Marshaller
marshaller
=
context
.
createMarshaller
();
// 格式化xml输出的格式
marshaller
.
setProperty
(
Marshaller
.
JAXB_FORMATTED_OUTPUT
,
Boolean
.
TRUE
);
// 将对象转换成输出流形式的xml
// 创建输出流
fw
=
new
FileWriter
(
path
);
marshaller
.
marshal
(
obj
,
fw
);
}
catch
(
JAXBException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
fw
.
toString
();
}
/**
* 将String类型的xml转换成对象
*
* @param clazz
* @param xmlStr
* @return
*/
public
static
Object
convertXmlStrToObject
(
Class
clazz
,
String
xmlStr
)
throws
Exception
{
Object
xmlObject
=
null
;
try
{
JAXBContext
context
=
JAXBContext
.
newInstance
(
clazz
);
// 进行将Xml转成对象的核心接口
Unmarshaller
unmarshaller
=
context
.
createUnmarshaller
();
StringReader
sr
=
new
StringReader
(
xmlStr
);
xmlObject
=
unmarshaller
.
unmarshal
(
sr
);
}
catch
(
JAXBException
e
)
{
log
.
error
(
"xml字符串转化实体类对象失败:"
,
e
);
throw
new
Exception
(
"xml字符串转化实体类对象失败:"
,
e
);
}
return
xmlObject
;
}
/**
* 将file类型的xml转换成对象
*
* @param clazz
* @param xmlPath
* @return
*/
public
static
Object
convertXmlFileToObject
(
Class
clazz
,
String
xmlPath
)
{
Object
xmlObject
=
null
;
try
{
JAXBContext
context
=
JAXBContext
.
newInstance
(
clazz
);
Unmarshaller
unmarshaller
=
context
.
createUnmarshaller
();
FileReader
fr
=
null
;
fr
=
new
FileReader
(
xmlPath
);
xmlObject
=
unmarshaller
.
unmarshal
(
fr
);
}
catch
(
JAXBException
e
)
{
e
.
printStackTrace
();
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
}
return
xmlObject
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment