Java 安卓改造带有安全头的soap请求信封
我已经编写了一个带有安全头的soap请求信封类。我正在使用Reformation2及其simplexml转换器。有些人很难从中发现问题。我在使用以下类时遇到内部服务器错误500。我已经删除了getter和setter,所以这个问题将是精确的Java 安卓改造带有安全头的soap请求信封,java,android,soap,retrofit2,Java,Android,Soap,Retrofit2,我已经编写了一个带有安全头的soap请求信封类。我正在使用Reformation2及其simplexml转换器。有些人很难从中发现问题。我在使用以下类时遇到内部服务器错误500。我已经删除了getter和setter,所以这个问题将是精确的 @Root(name = "soapenv") @NamespaceList({ @Namespace(prefix = "new", reference = "http://www.example.org/ClassViewRQST"),
@Root(name = "soapenv")
@NamespaceList({
@Namespace(prefix = "new", reference = "http://www.example.org/ClassViewRQST"),
@Namespace(prefix = "soapenv", reference = "http://schemas.xmlsoap.org/soap/envelope/")
})
public class PeopleSoftRequest {
@Element(name = "soapenv:Header", required = false)
private PeopleSoftHeader header;
@Root(name = "soapenv:Header", strict = false)
public static class PeopleSoftHeader {
@Element(name = "wsse:Security", required = false)
private Security security;
}
@NamespaceList({
@Namespace(prefix = "mustUnderstand", reference = "1"),
@Namespace(prefix = "wsse", reference = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
})
@Root(name = "wsse:Security", strict = false)
public static class Security {
@Element(name = "wsse:UsernameToken", required = false)
private UserNameToken userNameToken;
}
@Root(name = "wsse:UsernameToken", strict = false)
public static class UserNameToken {
@Element(name = "wsse:Username", required = false)
private String username;
@Namespace(prefix = "type", reference = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText")
@Element(name = "wsse:Password", required = false)
private String passWord;
}
@Element(name = "Body", required = false)
private PeopleSoftBody body;
}
下面是原始soap请求信封供参考
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:new="http://www.example.org/ClassViewRQST">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>XXXXXXX</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXXX</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>\n
<soapenv:Body>
</soapenv:Body>
</soapenv:Envelope>
XXXXXXX
XXXXXXXX
\n
解决了这个问题。以下是详细信息
主要问题是,当soap生成请求时,它会与soap标记名称空间前缀混淆,如
正在生成的请求
<type:wsse:Password xmlns:type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXXX</type:wsse:Password>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXXXXXX</wsse:Password>
public static class Password{
@Text
private String password;
@Attribute(name = "Type")
String Type = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}