2016-12-06 46 views
0

我使用WSO2is-5.2.0 SCIM接口,并遇到一些奇怪的问题。wso2is-5.2.0 SCIM创建请求返回状态200

这是一个移动应用程序项目,我们决定使用WSO2 IS作为身份管理。客户注册是通过WSO2 IS的SCIM界面完成的。

在所述移动设备进入和通过与内容类型=应用/ JSON一个RESTful请求消息提交用户名和密码(见下文TS代码)

public signin(){ 
    let data = {"userName":this.sf.get("userName").value, 
    "password":this.sf.get("password").value}; 
    debugger; 
    this.gabriel.create(data).subscribe(
     (res) => { 
     this. _res = res; 
     debugger; 
     }, 
     error => { 
      console.log('somthing went wrong '); 
     }, 
    () => {} 
    ); 
    } 

网关是Apache CXF JAX-RS ;我们使用wso2 Charon代码集来确保与WSO2 IS的兼容性。

在该请求被截获并解释为子类“org.wso2.charon.core.objects.User”的栅极(见下面的代码)

@POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("/signin") 
    public ScimRes signin(GubUser signin); 

GubUser和ScimRes的定义

public class GubUser extends User { 

    private static final long serialVersionUID = 5431026567781364473L; 

    public GubUser() { 
     super(); 
    } 
... 


public class ScimRes { 
    private int state; 
    private String id; 

    public int getState(){ 
     return this.state; 
    } 

    public void setState(int state){ 
     this.state = state; 
    } 
    ... 

用于扩展User类的原因是,我们要包括从终端一些额外的信息。和这些额外信息从该对象,以便发送到WSO2的数据是SCIM接口是100%符合的到用户定义删除之前被输送到WSO2 IS SCIM接口(见下面的代码)

@Override 
     public ScimRes signin(GubUser signin) { 

      if(signin == null){ 
       return null; 
      } 

      Boolean klp = null; 
      String device = null; 
      String user = null; 
      try {    
        klp = signin.getKlp(); 

        if(klp != null && klp.booleanValue() == true){ 
        device = signin.getGubDevice(); 
        signin.deleteAttribute("klp"); 
        signin.deleteAttribute("gubDevice"); 
        } 

        Observable.just(signin) 
        .flatMap(in -> {return Observable.just(Scim.createUser(in));}) 
        .subscribe(res -> this.scimRes = res); 

... 

现在,主叫到WSO2 IS SCIM(见下面的代码)

public class Scim { 
    private static HttpClient client = new DefaultHttpClient(); 
    private static String basicAuthToken = setBasicAuthToken(); 

    public static ScimRes createUser(User user) throws CharonException, ClientProtocolException, IOException, ParseException{ 
     String encodedUser = new SCIMClient().encodeSCIMObject(user, SCIMConstants.JSON); 
     HttpPost post = new HttpPost(Params.scimUrl); 
     post.addHeader(SCIMConstants.AUTHORIZATION_HEADER, basicAuthToken); 
     post.addHeader("Accept", SCIMConstants.APPLICATION_JSON); 
     post.addHeader("Accept-Charset", "utf-8"); 
     StringEntity entity = new StringEntity(encodedUser, SCIMConstants.APPLICATION_JSON, "UTF-8"); 
     post.setEntity(entity); 
     ScimRes scimRes = new ScimRes(); 
     HttpResponse res = client.execute(post); 
     scimRes.setState(res.getStatusLine().getStatusCode()); 

     int resStatus = scimRes.getState(); 
     if(resStatus == HttpStatus.SC_CREATED || resStatus == HttpStatus.SC_OK){ 
      InputStream is = res.getEntity().getContent(); 
      JSONParser jsonParser = new JSONParser(); 
      JSONObject jo = (JSONObject)jsonParser.parse(new InputStreamReader(is, "UTF-8")); 
      scimRes.setId((String)jo.get("id")); 
      is.close(); 

     } 
     return scimRes; 
    } 

捕获在

JSONObject jo = (JSONObject)jsonParser.parse(new InputStreamReader(is, "UTF-8")); 

我得到的HTTP响应消息头部的拷贝的程序(见下文)

HTTP/1.1 200 OK [X-Frame-Options:DENY,X-Content-Type-Options: nosniff,X-XSS-Protection:1;模式=块,内容类型: text/html的;字符集= UTF-8,内容长度:1445,日期:星期二,2016年12月6日11时52分39秒 GMT,服务器:WSO2碳服务器]

而且堆栈打印

Unexpected character (<) at position 0. 
at org.json.simple.parser.Yylex.yylex(Yylex.java:610) 
at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269) 
at org.json.simple.parser.JSONParser.parse(JSONParser.java:118) 
at org.json.simple.parser.JSONParser.parse(JSONParser.java:92) 
at com.gubnoi.user.provision.Scim.createUser(Scim.java:52) 
at com.gubnoi.gate.Gate.lambda$signin$0(Gate.java:131) 
at io.reactivex.internal.operators.observable.ObservableScalarXMap$ScalarXMapObservable.subscribeActual(ObservableScalarXMap.java:141) 

似乎邮件正文开始与“<”。这在JSON解析期间触发了一个异常。

任何人有任何想法?或者任何评论?或建议?

谢谢

+0

貌似已经发生了错误,你要在'文/ html'错误。 1)查看IS日志是否有任何日志。 2)打印传入的消息,而不解析为json,看看里面有什么。 – Bee

回答

相关问题