Spring REST PUT byte array

POM.xml

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>

API


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

private void test() {

	byte[] bytes = readBytesFromFile(path);
	// Prepare acceptable media type
	List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
	acceptableMediaTypes.add(MediaType.ALL);

	String uri = "http://localhost:8080/upload/{company}/{terminal}/{user}/{docType}/{docNum}/{trx}/?addendum=false&index=0&channel=ui";
	RestTemplate restTemplate = new RestTemplate();
	restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

	// Prepare header
	HttpHeaders headers = new HttpHeaders();
	headers.setAccept(acceptableMediaTypes);
	HttpEntity<byte[]> entity = new HttpEntity<byte[]>(bytes, headers);

	Map<String, String> param = new HashMap<String, String>();
	param.put("company", "750");
	param.put("terminal", "7501");
	param.put("user", "cmanshande");
	param.put("docType", "HAWS");
	param.put("docNum", "20222608918");
	param.put("trx", "750110714862");

	// Send the request as PUT
	restTemplate.exchange(uri, HttpMethod.PUT, entity, byte[].class, param);
}

Client

@RequestMapping(value = "/upload/{company}/{terminal}/{user}/{docType}/{txId}/**", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<String> processUpload(
		@RequestBody byte[] content,
		@PathVariable String company, 
		@PathVariable String terminal,
		@PathVariable String user, 
		@PathVariable String docType,
		@PathVariable String txId, 
		HttpServletRequest httpRequest) {
.
.
.
.
}

LISTAGG vs XMLAGG

LISTAGG gives “java.sql.SQLException: ORA-01489: result of string concatenation is too long” due to limitation for VARCHAR2.

select
  CONCAT(CONCAT(t2.REF_NUM_TYPE,':'), (listagg(t2.REF_NUM,',') within group (order by t2.REF_NUM asc))) as REF_NUMS_BK
from
(
	select
		max(s.PIPELINE_TX_ID) as PIPELINE_TX_ID,
		rn.ref_num_type,
		rn.ref_num
	from 
		reference_numbers rn, 
		ouk_shipment_activity_cmpny s 
	where 1=1
	and rn.pipeline_tx_id = s.pipeline_tx_id
	and s.PIPELINE_TX_ID = '123132123123'
	group by
		rn.ref_num_type,
		rn.ref_num
	order by
		rn.ref_num_type,
		rn.ref_num
) t2
where 1=1
group by
  t2.ref_num_type

Therefore, XMLELEMENT can be workaround.

select
  CONCAT(CONCAT(t2.REF_NUM_TYPE,':'),(RTRIM(XMLAGG(XMLELEMENT(e,t2.REF_NUM,',').EXTRACT('//text()')).GetClobVal(),','))) AS REF_NUMS
from
(
	select
		max(s.PIPELINE_TX_ID) as PIPELINE_TX_ID,
		rn.ref_num_type,
		rn.ref_num
	from 
		reference_numbers rn, 
		ouk_shipment_activity_cmpny s 
	where 1=1
	and rn.pipeline_tx_id = s.pipeline_tx_id
	and s.PIPELINE_TX_ID = '123132123123'
	group by
		rn.ref_num_type,
		rn.ref_num
	order by
		rn.ref_num_type,
		rn.ref_num
) t2
where 1=1
group by
  t2.ref_num_type

It can be trim as well.

select
 CONCAT(
  CONCAT(t2.REF_NUM_TYPE,':'),
   SUBSTR(
    (RTRIM(XMLAGG(XMLELEMENT(e,t2.REF_NUM,',').EXTRACT('//text()')).GetClobVal(),',')
   ),1,1000
  )
 ) AS REF_NUMS
from
(
	select
		max(s.PIPELINE_TX_ID) as PIPELINE_TX_ID,
		rn.ref_num_type,
		rn.ref_num
	from 
		reference_numbers rn, 
		ouk_shipment_activity_cmpny s 
	where 1=1
	and rn.pipeline_tx_id = s.pipeline_tx_id
	and s.PIPELINE_TX_ID = '30277174594' -- 202501494 202498201 30277174594(too long)
	group by
		rn.ref_num_type,
		rn.ref_num
	order by
		rn.ref_num_type,
		rn.ref_num
) t2
where 1=1
group by
  t2.ref_num_type

Example for XMLAGG with order by

with ref_base as (
    select 
     max(a.PIPELINE_TX_ID) as ppl
    ,a.REF_NUM_TYPE
    ,a.REF_NUM
    from REFERENCE_NUMBERS a where 1=1
    and a.PIPELINE_TX_ID = '30277174594'
    group by a.REF_NUM_TYPE, a.REF_NUM
    order by a.REF_NUM_TYPE, a.REF_NUM
)
select
(
    select RTRIM((XMLAGG(XMLELEMENT(e, b.REF_NUM,',') order by b.REF_NUM).EXTRACT('//text()')).GetClobVal(),',') AS REF_NUMS
    from   ref_base b where  b.REF_NUM_TYPE = 'ED1'
    group  by b.REF_NUM_TYPE
) as REF_NUMS_ED1
from dual

Example for LISTAGG with limited elements

select
  LISTAGG(
   case
      when rownum <= 300 
      then (
        case
           when rownum = 300
           then rn.ref_num || ' MORE....'
           else rn.ref_num
        end
      )
      else null
   end,
   ','
  ) within group (order by rn.ref_num)
  as ref_nums
from reference_numbers rn
where rn.pipeline_tx_id = '123456'

Removed duplicated element

private List<SelectItem> getRemovedDupElements(List<SelectItem> list) {

	if (!list.isEmpty()) {
		Set<String> set = new HashSet<String>();
		List<SelectItem> newList = new ArrayList<SelectItem>();

		for (Iterator<SelectItem> iter = list.iterator(); iter.hasNext();) {
			SelectItem var = iter.next();
			String labelTemp = var.getLabel();
			if (set.add(labelTemp)) {
				newList.add(var);
			}
		}
		list.clear();
		return newList;
	}
	return list;
}

Decorator Pattern

design-pattern-hdr_img2
The Decorator Pattern is very useful pattern to extend your application more flexible.
Usually, a factory pattern, only one class will be invoked, but by using decorator pattern, you can invoice more than one classes in one call.

public interface RtrnAdjustService {

	List<Map<String, Object>> getRmaLineToBeAdjustd();
	List<Map<String, Object>> getRmaLineToBeAdjustd(RCV_RPT_LINETMsg rrLnTMsg);
	void adjustRma(List<Map<String, Object>> rmaLineToBeAdjustd, RCV_RPT_LINETMsg rrLnTMsg) throws RRException;
}

Above: Interface

public class AWBL1050AdjustStaticFactory {

	private AWBL1050AdjustStaticFactory() {
		// Prevent non-static instantiation
	}

	public static RtrnAdjustService getObj(AWBL1050CMsg bizMsg, List<Map<String, Object>> rmaLineToBeAdjustd, RCV_RPT_LINETMsg rrLnTMsg) throws RRException {

		RtrnAdjustServiceModel model = creteModel(bizMsg);
		// 1st invoike
		model.setRmaLineStsCd(RMA_LINE_STS.CANCELLED);
		RtrnAdjustService svc = new RtrnAdjustServiceImplByRmaBase(model);
		/** RMA qty need to be added for Non-Crushed line */
		svc.adjustRma(rmaLineToBeAdjustd, rrLnTMsg);

		/** Decolator Pattern (After first ajust) */
		// 2nd invoice
		return new RtrnAdjustServiceImplRmaQty(svc, model);
	}
}

Above: Factory call:

public class RtrnAdjustServiceImplByRmaBase implements RtrnAdjustService, AWBL1050Constant {

	protected RtrnAdjustServiceImplByRmaBase(RtrnAdjustServiceModel model) {
		this.model = model;
	}

	public List<Map<String, Object>> getRmaLineToBeAdjustd() {
		// Since RR line is not specified, the entire RR is a target
		return new List<Map<String, Object>>();
	}

	public void adjustRma(List<Map<String, Object>> rmaLineToBeAdjustd, RCV_RPT_LINETMsg rrLnTMsg) throws RRException {
		// do something
	}
}

Above: 1st class to be invoked

public class RtrnAdjustServiceImplRmaQty extends RtrnAdjustServiceDecolator implements AWBL1050Constant {

	protected RtrnAdjustServiceImplRmaQty(RtrnAdjustService svc, RtrnAdjustServiceModel model) {
		super(svc);
		this.model = model;
	}

	public List<Map<String, Object>> getRmaLineToBeAdjustd() {
		return new ArrayList<Map<String, Object>>(); // Return empty list
	}

	public List<Map<String, Object>> getRmaLineToBeAdjustd(RCV_RPT_LINETMsg rrLnTMsg) {
		return new ArrayList<Map<String, Object>>(); // Return empty list
	}

	@Override
	public void adjustRma(List<Map<String, Object>> rmaLineToBeAdjustd, RCV_RPT_LINETMsg rrLnTMsg) throws RRException {
		// do something
	}
}

Above: 2nd class to be invoked

The factory class call two class by one call, so you don’t need to change any code from main class that call the method.

public abstract class RtrnAdjustServiceDecolator implements RtrnAdjustService {

	protected RtrnAdjustService svc;
	
	protected RtrnAdjustServiceDecolator(RtrnAdjustService svc) {
		this.svc = svc;
	}

	public abstract void adjustRma(List<Map<String, Object>> rmaLineToBeAdjustd, RCV_RPT_LINETMsg rrLnTMsg) throws RRException;
}

Above: Abstract class for 2nd class

RtrnAdjustService svc = AWBL1050AdjustStaticFactory.getObj(bizMsg);
List<Map<String, Object>> rmaLineToBeAdjustd = svc.getRmaLineToBeAdjustd();
.
.
/** Calling by factory */
svc = AWBL1050AdjustStaticFactory.getObj(bizMsg, rmaLineToBeAdjustd, rrLnTMsg);
/** Method call */
svc.adjustRma(rmaLineToBeAdjustd, rrLnTMsg);
.

Above: class and method call from such as main method

Decimal vs Hex vs Base 36

package test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.math.BigInteger;

public class Test2 {
	
	public static void main(String args[]) {
		System.out.print(&quot;\nD\tB36\tHex&quot;);
		System.out.print(&quot;\n-------------------------&quot;);
		for( int i=0; i &lt; 1296; i++ ) {
			// 1. Hex String
			Integer intObj = new Integer(i);
			String hexStr = String.format(&quot;%02X&quot;, intObj &amp; 0xFF);
			// 2. Base 36 String
			String base36StrRaw = Integer.toString(i, 36);			
			String base36Str = getBase36Str(base36StrRaw);
			// 3. Decimal converted back to Base 36
			String longStr = Long.valueOf(base36Str, 36).toString();
			
//			if(isAllDigit(base36Str)) {
//				continue;
//			}
			System.out.print(&quot;\n&quot; + i + &quot;\t&quot; + base36Str + &quot;\t&quot; + hexStr);
		}
		System.out.print(&quot;\n-------------------------&quot;);
	}
	
	private static String getBase36Str(String base36StrRaw) {
		if (base36StrRaw.length() == 1) {
			base36StrRaw = &quot;0&quot; + base36StrRaw;
		}
		return base36StrRaw.toUpperCase();
	}
	
    public static boolean isAllDigit(String input) {
        if (input == null || input.equals(&quot;&quot;)) {
            return false;
        } else {
            input = input.trim();
            int size = input.length();
            int count = 0;
            for (int i = 0; i &lt; size; i++) {
                if (isDigit(input.charAt(i))) {
                	count++;
                }
            }
            if(count == size) {
            	return true;
            }            
        }
        return false;
    }
	
    public static boolean isNumber(String input) {
        if (input == null || input.equals(&quot;&quot;)) {
            return false;
        } else {
            input = input.trim();
            for (int i = 0; i &lt; input.length(); i++) {
                if (!isDigit(input.charAt(i))) {
                    return false;
                }
            }
        }
        return true;
    }

    private static boolean isDigit(char c) {
        if (c != '0' &amp;&amp; c != '1' &amp;&amp; c != '2' &amp;&amp; c != '3' &amp;&amp; c != '4' &amp;&amp; c != '5' &amp;&amp; c != '6' &amp;&amp; c != '7' &amp;&amp; c != '8' &amp;&amp; c != '9') {
            return false;
        } else {
            return true;
        }
    }
}

Output:

D	B36	Hex
-------------------------
0	00	00
1	01	01
2	02	02
3	03	03
4	04	04
5	05	05
6	06	06
7	07	07
8	08	08
9	09	09
10	0A	0A
11	0B	0B
12	0C	0C
13	0D	0D
14	0E	0E
15	0F	0F
16	0G	10
17	0H	11
18	0I	12
19	0J	13
20	0K	14
21	0L	15
22	0M	16
23	0N	17
24	0O	18
25	0P	19
26	0Q	1A
27	0R	1B
28	0S	1C
29	0T	1D
30	0U	1E
31	0V	1F
32	0W	20
33	0X	21
34	0Y	22
35	0Z	23
36	10	24
37	11	25
38	12	26
39	13	27
40	14	28
41	15	29
42	16	2A
43	17	2B
44	18	2C
45	19	2D
46	1A	2E
47	1B	2F
48	1C	30
49	1D	31
50	1E	32
51	1F	33
52	1G	34
53	1H	35
54	1I	36
55	1J	37
56	1K	38
57	1L	39
58	1M	3A
59	1N	3B
60	1O	3C
61	1P	3D
62	1Q	3E
63	1R	3F
64	1S	40
65	1T	41
66	1U	42
67	1V	43
68	1W	44
69	1X	45
70	1Y	46
71	1Z	47
72	20	48
73	21	49
74	22	4A
75	23	4B
76	24	4C
77	25	4D
78	26	4E
79	27	4F
80	28	50
81	29	51
82	2A	52
83	2B	53
84	2C	54
85	2D	55
86	2E	56
87	2F	57
88	2G	58
89	2H	59
90	2I	5A
91	2J	5B
92	2K	5C
93	2L	5D
94	2M	5E
95	2N	5F
96	2O	60
97	2P	61
98	2Q	62
99	2R	63
100	2S	64
101	2T	65
102	2U	66
103	2V	67
104	2W	68
105	2X	69
106	2Y	6A
107	2Z	6B
108	30	6C
109	31	6D
110	32	6E
111	33	6F
112	34	70
113	35	71
114	36	72
115	37	73
116	38	74
117	39	75
118	3A	76
119	3B	77
120	3C	78
121	3D	79
122	3E	7A
123	3F	7B
124	3G	7C
125	3H	7D
126	3I	7E
127	3J	7F
128	3K	80
129	3L	81
130	3M	82
131	3N	83
132	3O	84
133	3P	85
134	3Q	86
135	3R	87
136	3S	88
137	3T	89
138	3U	8A
139	3V	8B
140	3W	8C
141	3X	8D
142	3Y	8E
143	3Z	8F
144	40	90
145	41	91
146	42	92
147	43	93
148	44	94
149	45	95
150	46	96
151	47	97
152	48	98
153	49	99
154	4A	9A
155	4B	9B
156	4C	9C
157	4D	9D
158	4E	9E
159	4F	9F
160	4G	A0
161	4H	A1
162	4I	A2
163	4J	A3
164	4K	A4
165	4L	A5
166	4M	A6
167	4N	A7
168	4O	A8
169	4P	A9
170	4Q	AA
171	4R	AB
172	4S	AC
173	4T	AD
174	4U	AE
175	4V	AF
176	4W	B0
177	4X	B1
178	4Y	B2
179	4Z	B3
180	50	B4
181	51	B5
182	52	B6
183	53	B7
184	54	B8
185	55	B9
186	56	BA
187	57	BB
188	58	BC
189	59	BD
190	5A	BE
191	5B	BF
192	5C	C0
193	5D	C1
194	5E	C2
195	5F	C3
196	5G	C4
197	5H	C5
198	5I	C6
199	5J	C7
200	5K	C8
201	5L	C9
202	5M	CA
203	5N	CB
204	5O	CC
205	5P	CD
206	5Q	CE
207	5R	CF
208	5S	D0
209	5T	D1
210	5U	D2
211	5V	D3
212	5W	D4
213	5X	D5
214	5Y	D6
215	5Z	D7
216	60	D8
217	61	D9
218	62	DA
219	63	DB
220	64	DC
221	65	DD
222	66	DE
223	67	DF
224	68	E0
225	69	E1
226	6A	E2
227	6B	E3
228	6C	E4
229	6D	E5
230	6E	E6
231	6F	E7
232	6G	E8
233	6H	E9
234	6I	EA
235	6J	EB
236	6K	EC
237	6L	ED
238	6M	EE
239	6N	EF
240	6O	F0
241	6P	F1
242	6Q	F2
243	6R	F3
244	6S	F4
245	6T	F5
246	6U	F6
247	6V	F7
248	6W	F8
249	6X	F9
250	6Y	FA
251	6Z	FB
252	70	FC
253	71	FD
254	72	FE
255	73	FF
256	74	00
257	75	01
258	76	02
259	77	03
260	78	04
261	79	05
262	7A	06
263	7B	07
264	7C	08
265	7D	09
266	7E	0A
267	7F	0B
268	7G	0C
269	7H	0D
270	7I	0E
271	7J	0F
272	7K	10
273	7L	11
274	7M	12
275	7N	13
276	7O	14
277	7P	15
278	7Q	16
279	7R	17
280	7S	18
281	7T	19
282	7U	1A
283	7V	1B
284	7W	1C
285	7X	1D
286	7Y	1E
287	7Z	1F
288	80	20
289	81	21
290	82	22
291	83	23
292	84	24
293	85	25
294	86	26
295	87	27
296	88	28
297	89	29
298	8A	2A
299	8B	2B
300	8C	2C
...................
998	RQ	E6
999	RR	E7
1000	RS	E8
1001	RT	E9
1002	RU	EA
1003	RV	EB
1004	RW	EC
1005	RX	ED
1006	RY	EE
1007	RZ	EF
1008	S0	F0
1009	S1	F1
1010	S2	F2
1011	S3	F3
1012	S4	F4
1013	S5	F5
1014	S6	F6
1015	S7	F7
1016	S8	F8
1017	S9	F9
1018	SA	FA
1019	SB	FB
1020	SC	FC
1021	SD	FD
1022	SE	FE
1023	SF	FF
1024	SG	00
1025	SH	01
1026	SI	02
1027	SJ	03
1028	SK	04
1029	SL	05
1030	SM	06
1031	SN	07
1032	SO	08
1033	SP	09
1034	SQ	0A
1035	SR	0B
1036	SS	0C
1037	ST	0D
1038	SU	0E
1039	SV	0F
1040	SW	10
1041	SX	11
1042	SY	12
1043	SZ	13
1044	T0	14
1045	T1	15
1046	T2	16
1047	T3	17
1048	T4	18
1049	T5	19
1050	T6	1A
1051	T7	1B
1052	T8	1C
1053	T9	1D
1054	TA	1E
1055	TB	1F
1056	TC	20
1057	TD	21
1058	TE	22
1059	TF	23
1060	TG	24
1061	TH	25
1062	TI	26
1063	TJ	27
1064	TK	28
1065	TL	29
1066	TM	2A
1067	TN	2B
1068	TO	2C
1069	TP	2D
1070	TQ	2E
1071	TR	2F
1072	TS	30
1073	TT	31
1074	TU	32
1075	TV	33
1076	TW	34
1077	TX	35
1078	TY	36
1079	TZ	37
1080	U0	38
1081	U1	39
1082	U2	3A
1083	U3	3B
1084	U4	3C
1085	U5	3D
1086	U6	3E
1087	U7	3F
1088	U8	40
1089	U9	41
1090	UA	42
1091	UB	43
1092	UC	44
1093	UD	45
1094	UE	46
1095	UF	47
1096	UG	48
1097	UH	49
1098	UI	4A
1099	UJ	4B
1100	UK	4C
1101	UL	4D
1102	UM	4E
1103	UN	4F
1104	UO	50
1105	UP	51
1106	UQ	52
1107	UR	53
1108	US	54
1109	UT	55
1110	UU	56
1111	UV	57
1112	UW	58
1113	UX	59
1114	UY	5A
1115	UZ	5B
1116	V0	5C
1117	V1	5D
1118	V2	5E
1119	V3	5F
1120	V4	60
1121	V5	61
1122	V6	62
1123	V7	63
1124	V8	64
1125	V9	65
1126	VA	66
1127	VB	67
1128	VC	68
1129	VD	69
1130	VE	6A
1131	VF	6B
1132	VG	6C
1133	VH	6D
1134	VI	6E
1135	VJ	6F
1136	VK	70
1137	VL	71
1138	VM	72
1139	VN	73
1140	VO	74
1141	VP	75
1142	VQ	76
1143	VR	77
1144	VS	78
1145	VT	79
1146	VU	7A
1147	VV	7B
1148	VW	7C
1149	VX	7D
1150	VY	7E
1151	VZ	7F
1152	W0	80
1153	W1	81
1154	W2	82
1155	W3	83
1156	W4	84
1157	W5	85
1158	W6	86
1159	W7	87
1160	W8	88
1161	W9	89
1162	WA	8A
1163	WB	8B
1164	WC	8C
1165	WD	8D
1166	WE	8E
1167	WF	8F
1168	WG	90
1169	WH	91
1170	WI	92
1171	WJ	93
1172	WK	94
1173	WL	95
1174	WM	96
1175	WN	97
1176	WO	98
1177	WP	99
1178	WQ	9A
1179	WR	9B
1180	WS	9C
1181	WT	9D
1182	WU	9E
1183	WV	9F
1184	WW	A0
1185	WX	A1
1186	WY	A2
1187	WZ	A3
1188	X0	A4
1189	X1	A5
1190	X2	A6
1191	X3	A7
1192	X4	A8
1193	X5	A9
1194	X6	AA
1195	X7	AB
1196	X8	AC
1197	X9	AD
1198	XA	AE
1199	XB	AF
1200	XC	B0
1201	XD	B1
1202	XE	B2
1203	XF	B3
1204	XG	B4
1205	XH	B5
1206	XI	B6
1207	XJ	B7
1208	XK	B8
1209	XL	B9
1210	XM	BA
1211	XN	BB
1212	XO	BC
1213	XP	BD
1214	XQ	BE
1215	XR	BF
1216	XS	C0
1217	XT	C1
1218	XU	C2
1219	XV	C3
1220	XW	C4
1221	XX	C5
1222	XY	C6
1223	XZ	C7
1224	Y0	C8
1225	Y1	C9
1226	Y2	CA
1227	Y3	CB
1228	Y4	CC
1229	Y5	CD
1230	Y6	CE
1231	Y7	CF
1232	Y8	D0
1233	Y9	D1
1234	YA	D2
1235	YB	D3
1236	YC	D4
1237	YD	D5
1238	YE	D6
1239	YF	D7
1240	YG	D8
1241	YH	D9
1242	YI	DA
1243	YJ	DB
1244	YK	DC
1245	YL	DD
1246	YM	DE
1247	YN	DF
1248	YO	E0
1249	YP	E1
1250	YQ	E2
1251	YR	E3
1252	YS	E4
1253	YT	E5
1254	YU	E6
1255	YV	E7
1256	YW	E8
1257	YX	E9
1258	YY	EA
1259	YZ	EB
1260	Z0	EC
1261	Z1	ED
1262	Z2	EE
1263	Z3	EF
1264	Z4	F0
1265	Z5	F1
1266	Z6	F2
1267	Z7	F3
1268	Z8	F4
1269	Z9	F5
1270	ZA	F6
1271	ZB	F7
1272	ZC	F8
1273	ZD	F9
1274	ZE	FA
1275	ZF	FB
1276	ZG	FC
1277	ZH	FD
1278	ZI	FE
1279	ZJ	FF
1280	ZK	00
1281	ZL	01
1282	ZM	02
1283	ZN	03
1284	ZO	04
1285	ZP	05
1286	ZQ	06
1287	ZR	07
1288	ZS	08
1289	ZT	09
1290	ZU	0A
1291	ZV	0B
1292	ZW	0C
1293	ZX	0D
1294	ZY	0E
1295	ZZ	0F

Slingbox Setupのまとめ

before-after-img1


配線の仕方:
1. ブースターと分配器の設置
2. レコーダーの端子と接続
3. Slingbox M1 HDMIセットの内容
4. レコーダーとSlingboxの接続


用意するもの:

  • アンテナ信号用ブースター
  • 分配器
  • F型接栓ケーブル(3本)
  • Slingbox M1 HDMIセット
  • レコーダー

  • 設置に必要な電源(合計4つ):
    1. ブースター用
    2. Slingbox本体用
    3. コンバーター(USB電源)用
    4. レコーダー用


    参考:
    【ブースター】
    マスプロの増幅器を導入しました UB18L-P
    【Slingbox】
    セットアップ奮闘記
    設置から視聴まで
    iPhoneやiPadでテレビが見られる「Slingbox」を試してみた

    4. レコーダーとSlingboxの接続

    connect-img-converters3
    1. レコーダーとコンバーターへをHDMIケーブルで接続
    2. コンバーターからSlingbox本体をコンポーネントケーブルで接続(Audio用の赤白とVideo用の赤青緑の計5本)
    3. Slingbox本体に赤外線リモコンケーブルをつけ、先端をレコーダーの受信部の近くに固定する
    converter-slingbox-connect-img1.2
    Slingbox 350での接続イメージ(350のせいか赤外線リモコン端子がない)


    converter-connectors-img1
    コンバーターの接続部:


    slingbox-connector-img1.1
    Slingbox M1 本体の接続部:

    「リモコン操作用ケーブル端子」に赤外線リモコンケーブルを差し込み、先端をレコーダーの受信部の近くに固定する。

    【例】リモコンの信号が届きやすい場所に固定
    recorder-controller-receive-img1
    Panasonic DMR-BRW1010 リモコン受信部
    dmr-brw1010-controller-receive-img1


    slingbox-commect-img2
    Slingbox M1での接続図


    slingbox-commect-img3
    コンバーターとの接続イメージ(写真はSlingbox 350)

    【参考】
    対応機器一覧(公式ページ) Panasonic DMR-BRW1010 Other-001を選択
    Slingbox M1のリセット(公式ページ)


    【問題例】
    リモコン設定が出来ません->赤外線のレコーダー前に置いたら動きました

    リモコン接続ができない->他のレコーダーのリモコンコードと混同していた
    推測ですがリモコンコードを変えていませんか?DMR-BWT1100を購入時、近くにほかのパナソニック製レコーダーがあり、リモコンコードを変更したんではないのかな。
    【原因】
    DMR-BWT1100のリモコン設定を変更していました。家にあるパナソニック製品にリンクしないようにリモコン設定を1から2に変更していました。それを1に戻したら操作できました

    リモコン操作ができません->初期設定ができないPCがある
    一旦、sling box350のリセットボタン10秒以上長押しで初期リセットし、初期設定をしていたPC(aspire one OS:XP)と、初期設定後、すでにそれでアクセスしてしまった2台(両方ともwin8.1)以外の古いPC(dell OS:XP)を使って、初期設定をしたら無事にリモコンのグレーアウトしなくなり、使えるようになりました。

    初期設定が成功した後は、今までリモコンが動かなかった3台のPCでも、見られるようになりました
    みなさん、色々アドバイスありがとうございました。
    とりあえず、古いやつをすてずに持っていて良かった!!!

    視聴する事は出来ましたが、リモコンが操作出来ません->マイクロソフトアカウントを使用している且つ日本語のユーザー名になっているから
    【原因】
    マイクロソフトアカウントを使用している且つ日本語のユーザー名になっているから。
    ※当方windows8 64bitを使用
    【対策】
    Slingboxのサポートセンターからリモートで再設定。
    ※個人でも解決方法はあります。ローカルアカウントを作成してそちらから設定を行えば問題ないです。
    【対策の具体的な方法】
    ①PC内にローカルアカウントを作成
    ②そのアカウント内で再度リセット→設定
    ③元のアカウント(マイクロソフトアカウント)に戻って、Slingboxを起動。
    ※元のアカウントに戻って、リセットをかけるとリモコン操作不能の状態に戻ってしまいますので、
     設定する時は全てローカルアカウントからの操作が必要
    ※現在使用しているアカウントの関連付けを解除してローカル化し、ユーザー名も変更して試してみましたが、
    なぜか設定できませんでした。ということで、無事視聴可能になりましたのでありがとうございました。

    レコーダーを変更したら動かなくなった。本体をリセットしたらSlingboxが認識されなくなってしまった。
    【原因】
    無線LANの接続状態が良くなかった。直接ケーブルで繋いだら解決

    チャンネル変更ができない->機器のリセット
    リセットの方法(公式)


    2. レコーダーの端子と接続
    3. Slingbox M1 HDMIセットの内容

    3. Slingbox M1 HDMIセットの内容

    Slingbox M1 HDMIセットの内容:


    1. HDMIコンバーター
    slingbox-conv-img1
    * コンバータ本体
    * HDMIケーブル (レコーダーとの接続に使用)
    * 給電用USBケーブル
    * 電源アダプタ
    converter-connectors-img1
    コンバーターの入力(HDMI)と出力(コンポーネント)


    2. Slingbox
    slingbox-body-img1
    * Slingbox本体
    * 赤白のステレオAudioケーブル (コンバーターとの接続に使用)
    * 赤青緑のコンポーネントVideoケーブル (コンバーターとの接続に使用)
    * 赤外線リモコンケーブル (レコーダーの遠隔操作に使用)
    * D端子/コンポーネント変換ケーブル (HDMI接続の場合は不要)
    * ACアダプタ
    * クイックスタートガイド
    slingbox-connector-img1.1
    Slingbox本体の入力(Audio/Videoコンポーネント)と出力(赤外線リモコンケーブル用)


    slingbox-m1-commect-img1
    接続イメージ(Slingbox本体)

    2. レコーダーの端子と接続
    4. レコーダーとSlingboxの接続

    2. レコーダーの端子と接続

    赤い点線部分:
    分配器によって2分配されたケーブルをレコーダーAとBのアンテナ入力端子に接続
    青い点線部分:
    レコーダーBの信号をSlingboxに(HDMI端子を介して)送る
    connect-img-converters1
    1. 分配器から出ている2つの出力端子にそれぞれケーブルを繋ぐ
    splitter-img1.1


    【レコーダーA】
    2. 2つのケーブルのうちの1つをレコーダーAの「アンテナから入力」端子に接続する。
    recorder-a-rear-panel-img1
    レコーダーAイメージ(Panasonic DMR-BW750)

    ****この時点でレコーダーAはアンテナの信号を受信出来る筈(テレビが視聴可)****
    ****ブースターの電源が入っていないと信号は来ないので注意****


    【レコーダーB】
    3. もう1つのケーブルを(Slingboxと接続するレコーダーBの)「アンテナから入力」端子に接続する。
    5. HDMI出力端子に(Slingbox HDMI コンバーター付属の)HDMIケーブルを接続する
    recorder-b-rear-panel-img1
    レコーダーBイメージ(Panasonic DMR-BRW1010)

    connect-to-conv-img1.2
    レコーダーBのHDMI出力端子とコンバーターの入力端子を接続

    1. ブースターと分配器の設置
    3. Slingbox M1 HDMIセットの内容

    1. ブースターと分配器の設置

    アンテナ用ケーブルと既存のレコーダーにの間にブースターと分配器のセットを設置する:
    connect-img-converters2
    用意するもの
    * ブースター (マスプロ UB18L-P)
    * 分配器
    * ケーブル(3本)
    booster-img1
    ブースターと分配器の全体図


    【接続手順】
    1. 既存のレコーダーAの「アンテナから入力」端子からケーブルを外す
    recorder-a-rear-panel-img1
    2. 外したケーブルをブースター(増幅部)の入力に接続
    3. ブースターの出力に電源部Aの入力を接続
    connec-cable-to-booster-img2
    4. 電源部Aに電源部B(給電部)を接続
    booster-img1.1.png
    ブースター部と電源部の図


    booster-connect-img1.2
    5. ブースターから分配器へ:
    電源部Aの出力と分配器の入力を新規ケーブルを使って接続
    splitter-img1.1
    6. 分配器からレコーダーへ:
    分配器の2つの出力端子(OUT)からそれぞれのレコーダーの「アンテナから入力」の端子に接続

    2. レコーダーの端子と接続へ進む