Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
T
topsun-bpm
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
鲁鑫
topsun-bpm
Commits
204a58e5
Commit
204a58e5
authored
Dec 18, 2023
by
鲁鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SAP接口
parent
d35ea7a1
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
301 additions
and
0 deletions
+301
-0
DefaultHttpClient.java
.../java/com/huigou/topsun/sap/common/DefaultHttpClient.java
+89
-0
Endpoint.java
.../src/main/java/com/huigou/topsun/sap/common/Endpoint.java
+11
-0
EndpointInterceptor.java
...ava/com/huigou/topsun/sap/common/EndpointInterceptor.java
+51
-0
HttpClient.java
...rc/main/java/com/huigou/topsun/sap/common/HttpClient.java
+23
-0
Message.java
...ain/java/com/huigou/topsun/sap/common/domain/Message.java
+24
-0
package-info.java
.../main/java/com/huigou/topsun/sap/common/package-info.java
+4
-0
MessageCodec.java
...com/huigou/topsun/sap/common/serializer/MessageCodec.java
+27
-0
MessageDeserializer.java
...gou/topsun/sap/common/serializer/MessageDeserializer.java
+13
-0
MessageSerializer.java
...uigou/topsun/sap/common/serializer/MessageSerializer.java
+13
-0
MessageHandlerMethodArgumentResolver.java
.../common/support/MessageHandlerMethodArgumentResolver.java
+46
-0
No files found.
topsun/src/main/java/com/huigou/topsun/sap/common/DefaultHttpClient.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
;
import
com.huigou.cache.SystemCache
;
import
com.huigou.topsun.sap.common.serializer.MessageSerializer
;
import
com.huigou.uasp.bmp.common.application.BaseApplication
;
import
org.apache.commons.io.IOUtils
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.HttpStatus
;
import
org.apache.http.StatusLine
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.HttpClientBuilder
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.io.IOException
;
import
java.util.Base64
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
*/
@Component
public
class
DefaultHttpClient
extends
BaseApplication
implements
HttpClient
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
DefaultHttpClient
.
class
);
private
final
MessageSerializer
messageSerializer
;
private
final
org
.
apache
.
http
.
client
.
HttpClient
http
=
HttpClientBuilder
.
create
().
build
();
@Autowired
public
DefaultHttpClient
(
MessageSerializer
messageSerializer
)
{
this
.
messageSerializer
=
messageSerializer
;
}
@Override
public
String
execute
(
Map
<
String
,
Object
>
param
,
String
url
)
throws
IOException
{
//系统接口地址
// ip地址
String
ip
=
SystemCache
.
getParameter
(
"sap.service.ip"
,
String
.
class
);
// 上下文
String
applicationContext
=
SystemCache
.
getParameter
(
"sap.service.application.context"
,
String
.
class
);
// 用户名
String
password
=
SystemCache
.
getParameter
(
"ap.service.password"
,
String
.
class
);
// 密码
String
username
=
SystemCache
.
getParameter
(
"sap.service.username"
,
String
.
class
);
// 客户端
String
client
=
SystemCache
.
getParameter
(
"sap.service.client"
,
String
.
class
);
//String serverUrl = "http://192.168.3.109:8000/sap/bc/erp_ep/bd_mastdata/material?sap-client=200";
StringBuffer
serverUrl
=
new
StringBuffer
();
serverUrl
.
append
(
ip
)
.
append
(
applicationContext
)
.
append
(
url
)
.
append
(
"?"
)
.
append
(
client
);
HttpPost
post
=
new
HttpPost
(
serverUrl
.
toString
());
String
usernameAndPassword
=
username
+
":"
+
password
;
post
.
addHeader
(
"Authorization"
,
"Basic "
+
Base64
.
getEncoder
().
encodeToString
(
usernameAndPassword
.
getBytes
()));
//post.addHeader("token",SystemCache.getParameter("material.token",String.class));
String
requestText
=
messageSerializer
.
serialize
(
param
);
LOG
.
info
(
"requestText={}"
,
requestText
);
post
.
setEntity
(
new
StringEntity
(
requestText
,
ContentType
.
APPLICATION_JSON
));
LOG
.
info
(
"post={}"
,
post
);
HttpResponse
response
;
String
responseText
=
""
;
try
{
response
=
http
.
execute
(
post
);
LOG
.
info
(
"response={}"
,
response
);
StatusLine
statusLine
=
response
.
getStatusLine
();
LOG
.
info
(
"statusLine={}"
,
statusLine
);
int
statusCode
=
statusLine
.
getStatusCode
();
if
(
statusLine
.
getStatusCode
()
<
HttpStatus
.
SC_OK
||
statusLine
.
getStatusCode
()
>=
HttpStatus
.
SC_MULTIPLE_CHOICES
)
{
throw
new
IOException
(
String
.
format
(
"调用SAP系统出错,statusCode=%s, %s"
,
statusCode
,
statusLine
.
getReasonPhrase
()));
}
responseText
=
IOUtils
.
readLines
(
response
.
getEntity
().
getContent
())
.
stream
()
.
collect
(
Collectors
.
joining
(
"\n"
));
LOG
.
info
(
"responseText={}"
,
responseText
);
LOG
.
info
(
"----------->> 调用SAP接口 {} 成功 <<-----------"
,
serverUrl
);
}
finally
{
post
.
releaseConnection
();
}
return
responseText
;
}
}
topsun/src/main/java/com/huigou/topsun/sap/common/Endpoint.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Target
({
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
Endpoint
{
}
topsun/src/main/java/com/huigou/topsun/sap/common/EndpointInterceptor.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
;
import
com.alibaba.fastjson.JSONWriter
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.MimeTypeUtils
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletResponse
;
import
java.nio.charset.StandardCharsets
;
import
java.util.HashMap
;
import
java.util.Map
;
@Aspect
@Component
public
class
EndpointInterceptor
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
com
.
huigou
.
topsun
.
sap
.
common
.
EndpointInterceptor
.
class
);
@Around
(
"@annotation(Endpoint)"
)
public
Object
intercept
(
ProceedingJoinPoint
pjp
)
throws
Throwable
{
// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Map
<
String
,
Object
>
result
=
new
HashMap
<>(
2
);
try
{
pjp
.
proceed
(
pjp
.
getArgs
());
result
.
put
(
"type"
,
HttpServletResponse
.
SC_OK
);
}
catch
(
IllegalArgumentException
iae
)
{
LOG
.
error
(
""
,
iae
);
result
.
put
(
"type"
,
HttpServletResponse
.
SC_BAD_REQUEST
);
result
.
put
(
"mesg"
,
"请求失败,"
+
iae
.
getMessage
());
}
catch
(
Exception
e
)
{
LOG
.
error
(
""
,
e
);
result
.
put
(
"type"
,
HttpServletResponse
.
SC_INTERNAL_SERVER_ERROR
);
result
.
put
(
"mesg"
,
"请求失败"
);
}
HttpServletResponse
response
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getResponse
();
response
.
setCharacterEncoding
(
StandardCharsets
.
UTF_8
.
name
());
response
.
setContentType
(
MimeTypeUtils
.
APPLICATION_JSON_VALUE
);
try
(
JSONWriter
writer
=
new
JSONWriter
(
response
.
getWriter
()))
{
writer
.
writeObject
(
result
);
writer
.
flush
();
}
return
null
;
}
}
topsun/src/main/java/com/huigou/topsun/sap/common/HttpClient.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
;
import
java.io.IOException
;
import
java.util.Map
;
/**
* esb客户端,用于调用esb服务。
*/
public
interface
HttpClient
{
/**
* param 要传递的数据,包括结构,在请求前会序列化和转json,不用特殊处理
* url 采用restful风格接口,ip、端口、上下文基本固定,只传名称
* 比如:"http://192.168.3.109:8000/sap/bc/erp_ep/bd_mastdata/material?sap-client=200";
* @param param
* @param url
* @return
* @throws IOException
*/
String
execute
(
Map
<
String
,
Object
>
param
,
String
url
)
throws
IOException
;
}
topsun/src/main/java/com/huigou/topsun/sap/common/domain/Message.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
.
domain
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 消息
*/
public
class
Message
{
/**
* 消息头
*/
private
final
Map
<
String
,
Object
>
body
=
new
HashMap
<>(
16
);
public
Map
<
String
,
Object
>
getBody
()
{
return
body
;
}
public
Message
setBody
(
String
name
,
Object
value
)
{
body
.
put
(
name
,
value
);
return
this
;
}
}
topsun/src/main/java/com/huigou/topsun/sap/common/package-info.java
0 → 100644
View file @
204a58e5
/**
* 同sap进行数据同步相关
*/
package
com
.
huigou
.
topsun
.
sap
.
common
;
\ No newline at end of file
topsun/src/main/java/com/huigou/topsun/sap/common/serializer/MessageCodec.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
.
serializer
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
com.huigou.topsun.sap.common.domain.Message
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
@Component
(
"messageCodec"
)
public
class
MessageCodec
implements
MessageSerializer
,
MessageDeserializer
{
@Override
public
String
serialize
(
Map
<
String
,
Object
>
map
)
{
return
JSON
.
toJSONString
(
map
,
SerializerFeature
.
DisableCircularReferenceDetect
);
}
@Override
public
Message
deserialze
(
String
text
)
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
text
);
Map
<
String
,
Object
>
body
=
jsonObject
.
getJSONObject
(
"body"
);
Message
message
=
new
Message
();
message
.
getBody
().
putAll
(
body
);
return
message
;
}
}
topsun/src/main/java/com/huigou/topsun/sap/common/serializer/MessageDeserializer.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
.
serializer
;
import
com.huigou.topsun.sap.common.domain.Message
;
/**
* 消息反序列化器
*/
public
interface
MessageDeserializer
{
Message
deserialze
(
String
text
);
}
topsun/src/main/java/com/huigou/topsun/sap/common/serializer/MessageSerializer.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
.
serializer
;
import
java.util.Map
;
/**
* 消息序列化器
*/
public
interface
MessageSerializer
{
String
serialize
(
Map
<
String
,
Object
>
map
);
}
topsun/src/main/java/com/huigou/topsun/sap/common/support/MessageHandlerMethodArgumentResolver.java
0 → 100644
View file @
204a58e5
package
com
.
huigou
.
topsun
.
sap
.
common
.
support
;
import
com.huigou.topsun.sap.common.domain.Message
;
import
com.huigou.topsun.sap.common.serializer.MessageDeserializer
;
import
org.apache.commons.io.IOUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.core.MethodParameter
;
import
org.springframework.web.bind.support.WebDataBinderFactory
;
import
org.springframework.web.context.request.NativeWebRequest
;
import
org.springframework.web.method.support.HandlerMethodArgumentResolver
;
import
org.springframework.web.method.support.ModelAndViewContainer
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.stream.Collectors
;
public
class
MessageHandlerMethodArgumentResolver
implements
HandlerMethodArgumentResolver
{
private
final
static
Logger
LOG
=
LoggerFactory
.
getLogger
(
MessageHandlerMethodArgumentResolver
.
class
);
private
MessageDeserializer
messageDeserializer
;
public
MessageHandlerMethodArgumentResolver
(
MessageDeserializer
messageDeserializer
)
{
this
.
messageDeserializer
=
messageDeserializer
;
}
@Override
public
boolean
supportsParameter
(
MethodParameter
parameter
)
{
return
Message
.
class
.
isAssignableFrom
(
parameter
.
getParameterType
());
}
@Override
public
Object
resolveArgument
(
MethodParameter
parameter
,
ModelAndViewContainer
mavContainer
,
NativeWebRequest
webRequest
,
WebDataBinderFactory
binderFactory
)
throws
Exception
{
String
requestText
;
try
{
requestText
=
IOUtils
.
readLines
(
webRequest
.
getNativeRequest
(
HttpServletRequest
.
class
).
getReader
()).
stream
()
.
collect
(
Collectors
.
joining
(
"\n"
));
}
catch
(
IOException
ioe
)
{
throw
new
IllegalArgumentException
(
"解析SAP消息出错"
,
ioe
);
}
LOG
.
info
(
"{},收到SAP消息: {}"
,
parameter
.
getMethod
().
toString
(),
requestText
);
return
messageDeserializer
.
deserialze
(
requestText
);
}
}
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