Reputation: 11
I have a webservice call with below output of xml from the below security class which is from oasisopenorgwssSecurity
<wsse:UsernameToken>
<wsse:Username>XXXXXXXX</wsse:Username>
<wsse:Password>xxxxxxxxxxxx</wsse:Password></wsse:UsernameToken>
public class OasisOpenOrgWssSecuritySecext
{
// UserToken Class
public class UsernameToken
{
// Constructor for UsernameToken used to pass in username and password parameters
public UsernameToken(String username, String password)
{
this.Username = username;
this.Password = password;
this.Nonce = generateNounce();
this.Created = generateTimestamp();
}
public String Username;
public String Password;
public String Nonce;
public String Created;
private String[] Username_type_info = new String[]{'Username','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Password_type_info = new String[]{'Password','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Nonce_type_info = new String[]{'Nonce','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Created_type_info = new String[]{'wsu:Created','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'Username','Password','Nonce','Created'};
// Generate Nounce, random number base64 encoded
public String generateNounce()
{
Long randomLong = Crypto.getRandomLong();
return EncodingUtil.base64Encode(Blob.valueOf(String.valueOf(randomLong)));
}
// Generate timestamp in GMT
public String generateTimestamp()
{
return Datetime.now().formatGmt('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
}
}
// SecurityHeaderType Class
public class SecurityHeaderType
{
// Constructor for SecurityHeaderType used to pass in username and password parameters and instantiate the UsernameToken object
public SecurityHeaderType(String username, String password)
{
this.UsernameToken = new OasisOpenOrgWssSecuritySecext.UsernameToken(username, password);
}
public String wsuNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
public OasisOpenOrgWssSecuritySecext.UsernameToken UsernameToken;
private String[] UsernameToken_type_info = new String[]{'UsernameToken','http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','UsernameToken','1','1','false'};
private String[] wsuNamespace_att_info = new String[]{'xmlns:wsu'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'UsernameToken'};
}
}
the above code needed to be converted so that output of the web service call will look like below
<wsse:UsernameToken>
<wsse:Username>XXXXXXXX</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxxxxxxxxx</wsse:Password>
I do not know how to add TYPE parameter to password. Please help me!!
Upvotes: 0
Views: 460
Reputation: 1
I found a similar question posted here: What are the parameters for the Salesforce WebServiceCallout.invoke method?
Apparently it is not possible to create an attribute on a simple element.
Upvotes: 0
Reputation: 11
public class OasisOpenOrgWssSecuritySecext {
// UserToken Class
public class UsernameToken
{
// Constructor for UsernameToken used to pass in username and password parameters
public UsernameToken(String username, String password)
{
this.Username = username;
PasswordToken = new Password_element(password);
this.Nonce = generateNounce();
this.Created = generateTimestamp();
}
public String Username;
public Password_element PasswordToken;
public String Nonce;
public String Created;
private String[] Username_type_info = new String[]{'Username','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] PasswordToken_type_info = new String[]{'Password','http://www.w3.org/2001/XMLSchema','String','0','1','false'};
private String[] Nonce_type_info = new String[]{'Nonce','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Created_type_info = new String[]{'wsu:Created','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'Username','PasswordToken','Nonce','Created'};
// Generate Nounce, random number base64 encoded
public String generateNounce()
{
Long randomLong = Crypto.getRandomLong();
return EncodingUtil.base64Encode(Blob.valueOf(String.valueOf(randomLong)));
}
// Generate timestamp in GMT
public String generateTimestamp()
{
return Datetime.now().formatGmt('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
}
}
public class Password_element {
public Password_element(String passwords){
this.password = passwords;
}
public String password;
public String Type = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
private String[] password_type_info = new String[]{'password','http://www.w3.org/2001/XMLSchema','String','0','1','false'};
private String[] Type_att_info = new String[]{'Type'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{};
}
// SecurityHeaderType Class
public class SecurityHeaderType
{
// Constructor for SecurityHeaderType used to pass in username and password parameters and instantiate the UsernameToken object
public SecurityHeaderType(String username, String password)
{
this.UsernameToken = new OasisOpenOrgWssSecuritySecext.UsernameToken(username, password);
}
public String wsuNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
public OasisOpenOrgWssSecuritySecext.UsernameToken UsernameToken;
private String[] UsernameToken_type_info = new String[]{'UsernameToken','http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','UsernameToken','1','1','false'};
private String[] wsuNamespace_att_info = new String[]{'xmlns:wsu'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'UsernameToken'};
}
}
the output is it has TYPE but it does not take the password I have added
<Password Type=""/>
If I changes the password_token class as below then it appears the output as
<Password Type=""><Password>xxxxx</Password></Password>
public class Password_element {
public Password_element(String passwords){
this.password = passwords;
}
public String password;
public String Type = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
public String Type_x = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
private String[] password_type_info = new String[]{'password','http://www.w3.org/2001/XMLSchema','String','0','1','false'};
private String[] Type_att_info = new String[]{'Type'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'Password'};
}
Upvotes: 0
Reputation: 1
Try this:
// UserToken Class
public class UsernameToken
{
// Constructor for UsernameToken used to pass in username and password parameters
public UsernameToken(String username, String password)
{
this.Username = username;
this.Password = password;
this.Nonce = generateNounce();
this.Created = generateTimestamp();
this.Type_x = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
}
public String Username;
public String Password;
public String Nonce;
public String Created;
public String Type_x;
private String[] Username_type_info = new String[]{'Username','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Password_type_info = new String[]{'Password','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Nonce_type_info = new String[]{'Nonce','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Created_type_info = new String[]{'wsu:Created','http://www.w3.org/2001/XMLSchema','string','0','1','false'};
private String[] Type_x_att_info = new String[]{'Type'};
private String[] apex_schema_type_info = new String[]{'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','true','false'};
private String[] field_order_type_info = new String[]{'Username','Password','Nonce','Created'};
// Generate Nounce, random number base64 encoded
public String generateNounce()
{
Long randomLong = Crypto.getRandomLong();
return EncodingUtil.base64Encode(Blob.valueOf(String.valueOf(randomLong)));
}
// Generate timestamp in GMT
public String generateTimestamp()
{
return Datetime.now().formatGmt('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
}
}
Upvotes: 0